Revision: f931713237
Author: Nightgunner5
Date: Thu Feb 25 16:22:40 2010
Log: Update .hgtags to have version numbers instead of multiple stables.
http://code.google.com/p/shacrypt/source/detail?r=f931713237
Revision: 3e89f24554
Author: Nightgunner5
Date: Sat Feb 27 09:31:24 2010
Log: Move the files to their respective folders.
http://code.google.com/p/shacrypt/source/detail?r=3e89f24554
==============================================================================
Revision: f931713237
Author: Nightgunner5
Date: Thu Feb 25 16:22:40 2010
Log: Update .hgtags to have version numbers instead of multiple stables.
http://code.google.com/p/shacrypt/source/detail?r=f931713237
Modified:
/.hgtags
=======================================
--- /.hgtags Sun Nov 15 07:45:20 2009
+++ /.hgtags Thu Feb 25 16:22:40 2010
@@ -1,3 +1,4 @@
-546def9bb037429b515af35f7a8ba0aceefbf725 stable
-db4c0f641d25c8ab9f3e56b5c4ef2061338a433e stable
+546def9bb037429b515af35f7a8ba0aceefbf725 v1.1.2
+db4c0f641d25c8ab9f3e56b5c4ef2061338a433e v1.2
+a90e8f866f46910603670cccb11770e6d52f0e2a v1.2.1
a90e8f866f46910603670cccb11770e6d52f0e2a stable
==============================================================================
Revision: 3e89f24554
Author: Nightgunner5
Date: Sat Feb 27 09:31:24 2010
Log: Move the files to their respective folders.
http://code.google.com/p/shacrypt/source/detail?r=3e89f24554
Added:
/THANKS
/data/padlock.ico
/data/padlock.svg
/docs/Makefile.am
/docs/Makefile.in
/docs/shacrypt.1
/src/Makefile.am
/src/Makefile.in
/src/commandline.c
/src/glade.sed
/src/gui.c
/src/shacrypt-gui.rc
/src/shacrypt-icon.h
/src/shacrypt.c
/src/shacrypt.glade
/src/shacrypt.h
/src/third-party/cubehash.c
/src/third-party/cubehash.h
/src/third-party/md5.h
/src/third-party/md5c.c
/src/third-party/md5global.h
/src/third-party/nessie.h
/src/third-party/sha1.c
/src/third-party/sha1.h
/src/third-party/sha2.c
/src/third-party/sha2.h
/src/third-party/whirlpool.c
/tests/Makefile.am
/tests/Makefile.in
/tests/test-helper.c
Deleted:
/commandline.c
/glade.sed
/gui.c
/padlock.ico
/padlock.svg
/shacrypt-gui.rc
/shacrypt-icon.h
/shacrypt.1
/shacrypt.c
/shacrypt.glade
/shacrypt.h
/test-helper.c
/third-party/cubehash.c
/third-party/cubehash.h
/third-party/md5.h
/third-party/md5c.c
/third-party/md5global.h
/third-party/nessie.h
/third-party/sha1.c
/third-party/sha1.h
/third-party/sha2.c
/third-party/sha2.h
/third-party/whirlpool.c
Modified:
/ChangeLog
/Makefile.am
/Makefile.in
/NEWS
/configure
/configure.ac
/tests/t1.sh
/tests/t2.sh
/tests/t3.sh
/tests/t4.sh
/tests/t5.sh
=======================================
--- /dev/null
+++ /data/padlock.ico Sat Feb 27 09:31:24 2010
Binary file, no diff available.
=======================================
--- /dev/null
+++ /data/padlock.svg Sat Feb 27 09:31:24 2010
@@ -0,0 +1,945 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<!-- Original from the Tango Desktop Project
<http://tango.freedesktop.org/>
+ Modified by Nightgunner5 -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48px"
+ height="48px"
+ id="svg1381"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/status"
+ sodipodi:docname="padlock.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-xdpi="120"
+ inkscape:export-ydpi="120">
+ <defs
+ id="defs1383">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 24 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="48 : 24 : 1"
+ inkscape:persp3d-origin="24 : 16 : 1"
+ id="perspective2653" />
+ <linearGradient
+ id="linearGradient7613">
+ <stop
+ style="stop-color: rgb(255, 255, 255); stop-opacity: 0;"
+ offset="0"
+ id="stop7615" />
+ <stop
+ style="stop-color: rgb(255, 255, 255); stop-opacity: 1;"
+ offset="1"
+ id="stop7617" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient7601">
+ <stop
+ style="stop-color: rgb(255, 255, 255); stop-opacity: 1;"
+ offset="0"
+ id="stop7603" />
+ <stop
+ style="stop-color: rgb(255, 255, 255); stop-opacity: 0;"
+ offset="1"
+ id="stop7605" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5820">
+ <stop
+ id="stop6704"
+ offset="0"
+ style="stop-color: rgb(0, 0, 0); stop-opacity: 0;" />
+ <stop
+ style="stop-color: rgb(0, 0, 0); stop-opacity: 0;"
+ offset="0.60799319"
+ id="stop6706" />
+ <stop
+ style="stop-color: rgb(0, 0, 0); stop-opacity: 1;"
+ offset="1"
+ id="stop5824" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4135">
+ <stop
+ style="stop-color:#360089;stop-opacity:1;"
+ offset="0"
+ id="stop4137" />
+ <stop
+ style="stop-color:#4000a1;stop-opacity:0;"
+ offset="1"
+ id="stop4139" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3505">
+ <stop
+ style="stop-color:#7641ff;stop-opacity:1;"
+ offset="0"
+ id="stop3509" />
+ <stop
+ id="stop3513"
+ offset="1"
+ style="stop-color:#5700c3;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ y2="6.0396547"
+ x2="16.198252"
+ y1="9.6635771"
+ x1="19.250618"
+ gradientTransform="translate(0, -1.92628)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1394"
+ xlink:href="#linearGradient11335"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="17.470011"
+ x2="27.192274"
+ y1="2.9136841"
+ x1="10.650842"
+ gradientTransform="translate(0, -1.92628)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient1392"
+ xlink:href="#linearGradient10591"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="26.024691"
+ x2="27.824219"
+ y1="22.739454"
+ x1="27.812500"
+ gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
32.8977)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient2324"
+ xlink:href="#linearGradient5741"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="26.024691"
+ x2="27.824219"
+ y1="22.739454"
+ x1="27.812500"
+ gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
30.8977)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient2322"
+ xlink:href="#linearGradient5741"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="26.024691"
+ x2="27.824219"
+ y1="22.739454"
+ x1="27.812500"
+ gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
28.8977)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient2320"
+ xlink:href="#linearGradient5741"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="26.024691"
+ x2="27.824219"
+ y1="22.739454"
+ x1="27.812500"
+ gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
26.8977)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient2318"
+ xlink:href="#linearGradient5741"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="26.024691"
+ x2="27.824219"
+ y1="22.739454"
+ x1="27.812500"
+ gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
24.8977)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient2316"
+ xlink:href="#linearGradient5741"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="26.024691"
+ x2="27.824219"
+ y1="22.739454"
+ x1="27.812500"
+ gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
22.8977)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient2314"
+ xlink:href="#linearGradient5741"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="26.024691"
+ x2="27.824219"
+ y1="22.739454"
+ x1="27.812500"
+ gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
20.8977)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient2312"
+ xlink:href="#linearGradient5741"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="26.024691"
+ x2="27.824219"
+ y1="22.739454"
+ x1="27.812500"
+ gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
18.8977)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient2310"
+ xlink:href="#linearGradient5741"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="26.024691"
+ x2="27.824219"
+ y1="22.739454"
+ x1="27.812500"
+ gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
16.8977)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient2308"
+ xlink:href="#linearGradient5741"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="26.024691"
+ x2="27.824219"
+ y1="22.739454"
+ x1="27.812500"
+ gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
14.8977)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient2306"
+ xlink:href="#linearGradient5741"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient9845">
+ <stop
+ id="stop9847"
+ offset="0"
+ style="stop-color: rgb(255, 255, 255); stop-opacity: 1;" />
+ <stop
+ id="stop9849"
+ offset="1.0000000"
+ style="stop-color: rgb(255, 255, 255); stop-opacity: 0.494845;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient10591">
+ <stop
+ id="stop10593"
+ offset="0.0000000"
+ style="stop-color: rgb(202, 208, 198); stop-opacity: 1;" />
+ <stop
+ style="stop-color: rgb(234, 236, 233); stop-opacity: 1;"
+ offset="0.50000000"
+ id="stop10599" />
+ <stop
+ id="stop10595"
+ offset="1.0000000"
+ style="stop-color: rgb(197, 203, 192); stop-opacity: 1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient11327">
+ <stop
+ id="stop11329"
+ offset="0"
+ style="stop-color:#32007d;stop-opacity:1;" />
+ <stop
+ id="stop11331"
+ offset="1"
+ style="stop-color:#4b00be;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient11335">
+ <stop
+ id="stop11337"
+ offset="0"
+ style="stop-color: rgb(111, 113, 109); stop-opacity: 1;" />
+ <stop
+ id="stop11339"
+ offset="1.0000000"
+ style="stop-color: rgb(158, 160, 156); stop-opacity: 1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient12071"
+ inkscape:collect="always">
+ <stop
+ id="stop12073"
+ offset="0"
+ style="stop-color: rgb(255, 255, 255); stop-opacity: 1;" />
+ <stop
+ id="stop12075"
+ offset="1"
+ style="stop-color: rgb(255, 255, 255); stop-opacity: 0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5741">
+ <stop
+ id="stop5743"
+ offset="0"
+ style="stop-color:#360089;stop-opacity:1;" />
+ <stop
+ id="stop5745"
+ offset="1"
+ style="stop-color:#4000a1;stop-opacity:0.26666668;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2092">
+ <stop
+ style="stop-color:#6900ea;stop-opacity:0.71372551;"
+ offset="0"
+ id="stop2094" />
+ <stop
+ id="stop2098"
+ offset="0.20999999"
+ style="stop-color:#7641ff;stop-opacity:1;" />
+ <stop
+ style="stop-color:#6600e2;stop-opacity:1;"
+ offset="0.83999997"
+ id="stop2293" />
+ <stop
+ style="stop-color:#5700c3;stop-opacity:1;"
+ offset="1"
+ id="stop2100" />
+ </linearGradient>
+ <radialGradient
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1, 0, 0, 0.651376, 4.75661e-15, 10.7575)"
+ r="15.571428"
+ fy="30.857143"
+ fx="22.571428"
+ cy="30.857143"
+ cx="22.571428"
+ id="radialGradient3564"
+ xlink:href="#linearGradient3558"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient3558"
+ inkscape:collect="always">
+ <stop
+ id="stop3560"
+ offset="0"
+ style="stop-color: rgb(0, 0, 0); stop-opacity: 1;" />
+ <stop
+ id="stop3562"
+ offset="1"
+ style="stop-color: rgb(0, 0, 0); stop-opacity: 0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2298"
+ inkscape:collect="always">
+ <stop
+ id="stop2300"
+ offset="0"
+ style="stop-color: rgb(255, 255, 255); stop-opacity: 1;" />
+ <stop
+ id="stop2302"
+ offset="1"
+ style="stop-color: rgb(255, 255, 255); stop-opacity: 0;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2298"
+ id="radialGradient1572"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.53109, -2.90183e-16, 6.08002e-09,
2.86055, -19.6679, -16.3393)"
+ cx="12.845672"
+ cy="13.342374"
+ fx="12.845672"
+ fy="13.342374"
+ r="17" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9845"
+ id="linearGradient1575"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.999112, 0, 0, 1.0958, 0.0364214,
-4.13973)"
+ x1="10.907269"
+ y1="25.002281"
+ x2="30.875446"
+ y2="36.127281" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2092"
+ id="linearGradient1578"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1, 0, 0, 1.08988, 0, -5.10979)"
+ x1="6.7268200"
+ y1="32.161697"
+ x2="40.938126"
+ y2="32.161697" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient11327"
+ id="linearGradient1580"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1, 0, 0, 1.08988, 0, -3.9869)"
+ x1="31.630468"
+ y1="41.791817"
+ x2="8.6713638"
+ y2="25.793524" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3505"
+ id="linearGradient1591"
+ x1="24.875"
+ y1="21"
+ x2="24.75"
+ y2="17"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0, 1)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient12071"
+ id="linearGradient1387"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1, 0, 0, 0.951923, 0, 1.97596)"
+ x1="21.941509"
+ y1="21.550869"
+ x2="21.941509"
+ y2="18.037588" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5741"
+ id="linearGradient1411"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
14.8977)"
+ x1="27.812500"
+ y1="22.739454"
+ x2="27.824219"
+ y2="26.024691" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5741"
+ id="linearGradient1413"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
16.8977)"
+ x1="27.812500"
+ y1="22.739454"
+ x2="27.824219"
+ y2="26.024691" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5741"
+ id="linearGradient1415"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
18.8977)"
+ x1="27.812500"
+ y1="22.739454"
+ x2="27.824219"
+ y2="26.024691" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5741"
+ id="linearGradient1417"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
20.8977)"
+ x1="27.812500"
+ y1="22.739454"
+ x2="27.824219"
+ y2="26.024691" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5741"
+ id="linearGradient1419"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
22.8977)"
+ x1="27.812500"
+ y1="22.739454"
+ x2="27.824219"
+ y2="26.024691" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5741"
+ id="linearGradient1421"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
24.8977)"
+ x1="27.812500"
+ y1="22.739454"
+ x2="27.824219"
+ y2="26.024691" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5741"
+ id="linearGradient1423"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
26.8977)"
+ x1="27.812500"
+ y1="22.739454"
+ x2="27.824219"
+ y2="26.024691" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5741"
+ id="linearGradient1425"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
28.8977)"
+ x1="27.812500"
+ y1="22.739454"
+ x2="27.824219"
+ y2="26.024691" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5741"
+ id="linearGradient1427"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
30.8977)"
+ x1="27.812500"
+ y1="22.739454"
+ x2="27.824219"
+ y2="26.024691" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5741"
+ id="linearGradient1429"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
32.8977)"
+ x1="27.812500"
+ y1="22.739454"
+ x2="27.824219"
+ y2="26.024691" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5741"
+ id="linearGradient2307"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.31236, 0, 1.79906e-17, 0.32409,
-1.15639, 5.66949)"
+ x1="27.812500"
+ y1="22.739454"
+ x2="27.824219"
+ y2="26.024691" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5741"
+ id="linearGradient2311"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.31236, 0, 1.79906e-17, 0.32409,
-1.15639, 3.66949)"
+ x1="27.812500"
+ y1="22.739454"
+ x2="27.824219"
+ y2="26.024691" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5741"
+ id="linearGradient2315"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.31236, 0, 1.79906e-17, 0.32409,
-1.15639, 1.66949)"
+ x1="27.812500"
+ y1="22.739454"
+ x2="27.824219"
+ y2="26.024691" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5741"
+ id="linearGradient2319"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.31236, 0, 1.79906e-17, 0.32409,
-1.15639, -0.330512)"
+ x1="27.812500"
+ y1="22.739454"
+ x2="27.824219"
+ y2="26.024691" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5741"
+ id="linearGradient2323"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.31236, 0, 1.79906e-17, 0.32409,
-1.15639, -2.33051)"
+ x1="27.812500"
+ y1="22.739454"
+ x2="27.824219"
+ y2="26.024691" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5741"
+ id="linearGradient2326"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.31236, 0, 1.79906e-17, 0.32409,
-1.15639, -4.33051)"
+ x1="27.812500"
+ y1="22.739454"
+ x2="27.824219"
+ y2="26.024691" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5741"
+ id="linearGradient2329"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.31236, 0, 1.79906e-17, 0.32409,
-1.15639, -6.33051)"
+ x1="27.812500"
+ y1="22.739454"
+ x2="27.824219"
+ y2="26.024691" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5741"
+ id="linearGradient2332"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.31236, 0, 1.79906e-17, 0.32409,
-1.15639, -8.33051)"
+ x1="27.812500"
+ y1="22.739454"
+ x2="27.824219"
+ y2="26.024691" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5741"
+ id="linearGradient2335"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.31236, 0, 1.79906e-17, 0.32409,
-1.15639, -10.3305)"
+ x1="27.812500"
+ y1="22.739454"
+ x2="27.824219"
+ y2="26.024691" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5741"
+ id="linearGradient2338"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.31236, 0, 1.79906e-17, 0.32409,
-1.15639, -12.3305)"
+ x1="27.812500"
+ y1="22.739454"
+ x2="27.824219"
+ y2="26.024691" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7601"
+ id="linearGradient7607"
+ x1="16.529249"
+ y1="-0.3973901"
+ x2="14.614914"
+ y2="12.436604"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7613"
+ id="radialGradient7611"
+ cx="30.996042"
+ cy="13.156409"
+ fx="30.996042"
+ fy="13.156409"
+ r="1.000184"
+ gradientTransform="matrix(-5.31617e-07, 14.969, -8.27668,
0.000396883, 143.895, -454.272)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9845"
+ id="radialGradient7619"
+ cx="12.184196"
+ cy="8.5463438"
+ fx="12.184196"
+ fy="8.5463438"
+ r="3.6037733"
+ gradientTransform="matrix(-0.441342, 3.78696, -3.28591, -0.382939,
47.9182, -38.4483)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4135"
+ id="linearGradient3433"
+ x1="39.25959"
+ y1="1.1983697"
+ x2="47.449375"
+ y2="1.1983697"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4135"
+ id="linearGradient3437"
+ gradientUnits="userSpaceOnUse"
+ x1="39.25959"
+ y1="1.1983697"
+ x2="47.449375"
+ y2="1.1983697" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="8"
+ inkscape:cx="21.351181"
+ inkscape:cy="24.483406"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ fill="#c4a000"
+ inkscape:window-width="872"
+ inkscape:window-height="667"
+ inkscape:window-x="545"
+ inkscape:window-y="200"
+ showborder="false"
+ inkscape:showpageshadow="false">
+ <inkscape:grid
+ id="GridFromPre046Settings"
+ type="xygrid"
+ originx="0px"
+ originy="0px"
+ spacingx="0.5px"
+ spacingy="0.5px"
+ color="#0000ff"
+ empcolor="#0000ff"
+ opacity="0.2"
+ empopacity="0.4"
+ empspacing="2" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata1386">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>Lock</dc:title>
+ <dc:date />
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Andreas Nilsson</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>lock</rdf:li>
+ <rdf:li>key</rdf:li>
+ <rdf:li>secure</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:contributor>
+ <cc:Agent>
+ <dc:title>Jakub Steiner,
+Lapo Calamandrei</dc:title>
+ </cc:Agent>
+ </dc:contributor>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Reproduction" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Distribution" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Notice" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Attribution" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/ShareAlike" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ inkscape:r_cy="true"
+ inkscape:r_cx="true"
+ sodipodi:type="arc"
+ style="opacity: 0.473684; color: rgb(0, 0, 0); fill:
url("#radialGradient3564") rgb(0, 0, 0); fill-opacity: 1;
fill-rule: nonzero; stroke: none; stroke-width: 1; stroke-linecap: round;
stroke-linejoin: round; marker: none; stroke-miterlimit: 4;
stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1;
visibility: visible; display: inline; overflow: visible;"
+ id="path3556"
+ sodipodi:cx="22.571428"
+ sodipodi:cy="30.857143"
+ sodipodi:rx="15.571428"
+ sodipodi:ry="10.142858"
+ d="M 38.142857 30.857143 A 15.571428 10.142858 0 1 1 7,30.857143 A
15.571428 10.142858 0 1 1 38.142857 30.857143 z"
+ transform="matrix(1.44023, 0, 0, 0.419014, -8.58157, 29.8204)" />
+ <rect
+ style="fill: url("#linearGradient1578") rgb(0, 0, 0);
fill-opacity: 1; fill-rule: evenodd; stroke:
url("#linearGradient1580") rgb(0, 0, 0); stroke-width: 0.999999;
stroke-linecap: round; stroke-linejoin: round; stroke-miterlimit: 4;
stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1;"
+ id="rect1314"
+ width="34.993771"
+ height="27.009277"
+ x="6.5"
+ y="17.5"
+ rx="2.2349751"
+ ry="2.2570534"
+ inkscape:r_cx="true"
+ inkscape:r_cy="true" />
+ <rect
+ style="fill: none; fill-opacity: 1; fill-rule: evenodd; stroke:
url("#linearGradient1575") rgb(0, 0, 0); stroke-width: 1;
stroke-linecap: round; stroke-linejoin: round; stroke-miterlimit: 4;
stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 0.601093;"
+ id="rect6903"
+ width="33.000904"
+ height="25.006882"
+ x="7.5"
+ y="18.5"
+ rx="1.288511"
+ ry="1.288511"
+ inkscape:r_cx="true"
+ inkscape:r_cy="true" />
+ <g
+ inkscape:r_cy="true"
+ inkscape:r_cx="true"
+ id="g2281"
+ style="opacity: 1;"
+ transform="matrix(1.06629, 0, 0, 1, -1.59099, 0)">
+ <rect
+ inkscape:r_cy="true"
+ inkscape:r_cx="true"
+ ry="0"
+ rx="0"
+ y="23"
+ x="8"
+ height="0.97227097"
+ width="32"
+ id="rect5013"
+ style="opacity: 0.5; fill: url("#linearGradient2306")
rgb(0, 0, 0); fill-opacity: 1; fill-rule: evenodd; stroke: none;
stroke-width: 1; stroke-linecap: round; stroke-linejoin: miter;
stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt;
stroke-opacity: 1;" />
+ <rect
+ inkscape:r_cy="true"
+ inkscape:r_cx="true"
+ style="opacity: 0.5; fill: url("#linearGradient2308")
rgb(0, 0, 0); fill-opacity: 1; fill-rule: evenodd; stroke: none;
stroke-width: 1; stroke-linecap: round; stroke-linejoin: miter;
stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt;
stroke-opacity: 1;"
+ id="rect2245"
+ width="32"
+ height="0.97227097"
+ x="8"
+ y="25"
+ rx="0"
+ ry="0" />
+ <rect
+ inkscape:r_cy="true"
+ inkscape:r_cx="true"
+ ry="0"
+ rx="0"
+ y="27"
+ x="8"
+ height="0.97227097"
+ width="32"
+ id="rect2249"
+ style="opacity: 0.5; fill: url("#linearGradient2310")
rgb(0, 0, 0); fill-opacity: 1; fill-rule: evenodd; stroke: none;
stroke-width: 1; stroke-linecap: round; stroke-linejoin: miter;
stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt;
stroke-opacity: 1;" />
+ <rect
+ inkscape:r_cy="true"
+ inkscape:r_cx="true"
+ style="opacity: 0.5; fill: url("#linearGradient2312")
rgb(0, 0, 0); fill-opacity: 1; fill-rule: evenodd; stroke: none;
stroke-width: 1; stroke-linecap: round; stroke-linejoin: miter;
stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt;
stroke-opacity: 1;"
+ id="rect2253"
+ width="32"
+ height="0.97227097"
+ x="8"
+ y="29"
+ rx="0"
+ ry="0" />
+ <rect
+ inkscape:r_cy="true"
+ inkscape:r_cx="true"
+ ry="0"
+ rx="0"
+ y="31"
+ x="8"
+ height="0.97227097"
+ width="32"
+ id="rect2257"
+ style="opacity: 0.5; fill: url("#linearGradient2314")
rgb(0, 0, 0); fill-opacity: 1; fill-rule: evenodd; stroke: none;
stroke-width: 1; stroke-linecap: round; stroke-linejoin: miter;
stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt;
stroke-opacity: 1;" />
+ <rect
+ inkscape:r_cy="true"
+ inkscape:r_cx="true"
+ style="opacity: 0.5; fill: url("#linearGradient2316")
rgb(0, 0, 0); fill-opacity: 1; fill-rule: evenodd; stroke: none;
stroke-width: 1; stroke-linecap: round; stroke-linejoin: miter;
stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt;
stroke-opacity: 1;"
+ id="rect2261"
+ width="32"
+ height="0.97227097"
+ x="8"
+ y="33"
+ rx="0"
+ ry="0" />
+ <rect
+ inkscape:r_cy="true"
+ inkscape:r_cx="true"
+ ry="0"
+ rx="0"
+ y="35"
+ x="8"
+ height="0.97227097"
+ width="32"
+ id="rect2265"
+ style="opacity: 0.5; fill: url("#linearGradient2318")
rgb(0, 0, 0); fill-opacity: 1; fill-rule: evenodd; stroke: none;
stroke-width: 1; stroke-linecap: round; stroke-linejoin: miter;
stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt;
stroke-opacity: 1;" />
+ <rect
+ inkscape:r_cy="true"
+ inkscape:r_cx="true"
+ style="opacity: 0.5; fill: url("#linearGradient2320")
rgb(0, 0, 0); fill-opacity: 1; fill-rule: evenodd; stroke: none;
stroke-width: 1; stroke-linecap: round; stroke-linejoin: miter;
stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt;
stroke-opacity: 1;"
+ id="rect2269"
+ width="32"
+ height="0.97227097"
+ x="8"
+ y="37"
+ rx="0"
+ ry="0" />
+ <rect
+ inkscape:r_cy="true"
+ inkscape:r_cx="true"
+ ry="0"
+ rx="0"
+ y="39"
+ x="8"
+ height="0.97227097"
+ width="32"
+ id="rect2273"
+ style="opacity: 0.5; fill: url("#linearGradient2322")
rgb(0, 0, 0); fill-opacity: 1; fill-rule: evenodd; stroke: none;
stroke-width: 1; stroke-linecap: round; stroke-linejoin: miter;
stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt;
stroke-opacity: 1;" />
+ <rect
+ inkscape:r_cy="true"
+ inkscape:r_cx="true"
+ style="opacity: 0.5; fill: url("#linearGradient2324")
rgb(0, 0, 0); fill-opacity: 1; fill-rule: evenodd; stroke: none;
stroke-width: 1; stroke-linecap: round; stroke-linejoin: miter;
stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt;
stroke-opacity: 1;"
+ id="rect2277"
+ width="32"
+ height="0.97227097"
+ x="8"
+ y="41"
+ rx="0"
+ ry="0" />
+ </g>
+ <rect
+ style="color: rgb(0, 0, 0); fill:
url("#linearGradient1591") rgb(0, 0, 0); fill-opacity: 1;
fill-rule: evenodd; stroke: none; stroke-width: 2; stroke-linecap: round;
stroke-linejoin: round; marker: none; stroke-miterlimit: 4;
stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1;
visibility: visible; display: inline; overflow: visible;"
+ id="rect1460"
+ width="34"
+ height="4"
+ x="7"
+ y="18"
+ inkscape:r_cx="true"
+ inkscape:r_cy="true"
+ rx="1.7146454"
+ ry="1.6610726" />
+ <path
+ inkscape:r_cy="true"
+ inkscape:r_cx="true"
+ style="opacity: 0.406593; fill:
url("#radialGradient1572") rgb(0, 0, 0); fill-opacity: 1;
fill-rule: evenodd; stroke: none; stroke-width: 1; stroke-linecap: round;
stroke-linejoin: round; stroke-miterlimit: 4; stroke-dashoffset: 0pt;
stroke-opacity: 0.601093;"
+ d="M 39.022894,21.954401 L 8.9789228,21.954401 C
7.4608208,21.962502 6.9982278,22.594587 6.9826028,24.335226 L
6.9826028,35.180882 C 12.330783,39.937562 24.775283,30.210883
40.982603,35.180882 L 40.982603,24.314186 C 40.969992,22.533917
40.441755,21.968139 39.022894,21.954401 z "
+ id="rect8390"
+ sodipodi:nodetypes="ccccccc" />
+ <g
+ id="g1387"
+ inkscape:r_cx="true"
+ inkscape:r_cy="true"
+ transform="translate(-2.08616e-07, -0.987405)">
+ <path
+ inkscape:r_cy="true"
+ inkscape:r_cx="true"
+ sodipodi:nodetypes="cczcccczccc"
+ id="path2086"
+ d="M 10.5,20.234846 L 10.5,13 C 10.5,5.1298666
15.897609,1.3910066 24.020027,1.4892921 C 32.18664,1.5875777 37.5,5.0372782
37.5,13 L 37.5,20.234846 C 37.416053,21.938431 32.536612,21.932149
32.5,20.234846 L 32.5,15 C 32.5,13 33.138264,6.528147 24.077241,6.528147 C
14.953718,6.528147 15.489989,13.039885 15.52268,14.992026 L
15.52268,20.268524 C 15.3125,21.859846 10.5,21.797346 10.5,20.234846 z "
+ style="fill: url("#linearGradient1392") rgb(0, 0, 0);
fill-opacity: 1; fill-rule: evenodd; stroke:
url("#linearGradient1394") rgb(0, 0, 0); stroke-width: 1;
stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4;
stroke-dasharray: none; stroke-opacity: 1;" />
+ <path
+ inkscape:r_cy="true"
+ inkscape:r_cx="true"
+ sodipodi:nodetypes="ccsccc"
+ id="rect11343"
+ d="M 11.496849,13.160018 C 11.745273,8.7621798 12.91305,4.7080565
18.456117,3.1987817 C 20.036661,5.0232133 13.557817,5.1195438
13.458448,11.481749 C 13.458448,11.481749 13.480108,19.46426
13.480108,19.46426 C 13.245273,20.052648 11.559349,20.070825
11.496849,19.414575 L 11.496849,13.160018 z "
+ style="fill: url("#radialGradient7619") rgb(0, 0, 0);
fill-opacity: 1; fill-rule: evenodd; stroke: none; stroke-width: 1;
stroke-linecap: round; stroke-linejoin: round; stroke-miterlimit: 4;
stroke-dashoffset: 0pt; stroke-opacity: 1;" />
+ <path
+ style="fill: url("#radialGradient7611") rgb(0, 0, 0);
fill-opacity: 1; fill-rule: evenodd; stroke: none; stroke-width: 1;
stroke-linecap: round; stroke-linejoin: round; stroke-miterlimit: 4;
stroke-dashoffset: 0pt; stroke-opacity: 1;"
+ d="M 33.500368,9.7120694 L 35.500368,9.7120694 L
35.500368,19.347482 C 35.437868,20.472482 33.469118,19.878732
33.500368,19.347482 L 33.500368,9.7120694 z "
+ id="rect1345"
+ sodipodi:nodetypes="ccccc"
+ inkscape:r_cx="true"
+ inkscape:r_cy="true" />
+ </g>
+ <rect
+ style="color: rgb(0, 0, 0); fill: none; fill-opacity: 1; fill-rule:
evenodd; stroke: url("#linearGradient1387") rgb(0, 0, 0);
stroke-width: 1; stroke-linecap: round; stroke-linejoin: round; marker:
none; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt;
stroke-opacity: 1; visibility: visible; display: inline; overflow: visible;"
+ id="rect1593"
+ width="33"
+ height="2.8557696"
+ x="7.5"
+ y="18.634619"
+ inkscape:r_cx="true"
+ inkscape:r_cy="true"
+ rx="1.2001942"
+ ry="1.0968477" />
+ </g>
+</svg>
=======================================
--- /dev/null
+++ /docs/Makefile.am Sat Feb 27 09:31:24 2010
@@ -0,0 +1,3 @@
+## Process this file with automake to produce Makefile.in
+
+dist_man_MANS = shacrypt.1
=======================================
--- /dev/null
+++ /docs/Makefile.in Sat Feb 27 09:31:24 2010
@@ -0,0 +1,417 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = docs
+DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' |
\
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+man1dir = $(mandir)/man1
+am__installdirs = "$(DESTDIR)$(man1dir)"
+NROFF = nroff
+MANS = $(dist_man_MANS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+COMMANDLINE = @COMMANDLINE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DWINDOWS = @DWINDOWS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+GUI_CFLAGS = @GUI_CFLAGS@
+GUI_LIBS = @GUI_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MWINDOWS = @MWINDOWS@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+dist_man_MANS = shacrypt.1
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits docs/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnits docs/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
$(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
$(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure
$(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-man1: $(dist_man_MANS)
+ @$(NORMAL_INSTALL)
+ test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ { for i in $$list; do echo "$$i"; done; \
+ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ test -z "$$files" || { \
+ echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(man1dir)" && rm -f $$files; }
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ @list='$(MANS)'; if test -n "$$list"; then \
+ list=`for p in $$list; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
+ if test -n "$$list" && \
+ grep 'ab help2man is required to generate this page' $$list
>/dev/null; then \
+ echo "error: found man pages containing the \`missing help2man'
replacement text:" >&2; \
+ grep -l 'ab help2man is required to generate this page' $$list |
sed 's/^/ /' >&2; \
+ echo " to fix them, install help2man, remove and regenerate the
man pages;" >&2; \
+ echo " typically \`make maintainer-clean' will remove them"
>&2; \
+ exit 1; \
+ else :; fi; \
+ else :; fi
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {}
\;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {}
\;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(man1dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f
$(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+ distclean-generic distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \
+ uninstall-am uninstall-man uninstall-man1
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
=======================================
--- /dev/null
+++ /docs/shacrypt.1 Sat Feb 27 09:31:24 2010
@@ -0,0 +1,75 @@
+.\" Copyright (C) 2009
+.\" LlamaSlayers
+.\"
+.\" This document is dual-licensed. You may distribute and/or modify it
+.\" under the terms of either of the following licenses:
+.\"
+.\" * The GNU General Public License, as published by the Free Software
+.\" Foundation, version 3 or (at your option) any later version. You
+.\" should have received a copy of the GNU General Public License
+.\" along with this program. If not, see
+.\" <http://www.gnu.org/licenses/>.
+.\"
+.\" * The GNU Free Documentation License, as published by the Free
+.\" Software Foundation, version 1.3 or (at your option) any later
+.\" version, with no Invariant Sections, no Front-Cover Texts, and no
+.\" Back-Cover Texts. You should have received a copy of the GNU Free
+.\" Documentation License along with this program. If not, see
+.\" <http://www.gnu.org/licenses/>.
+.\"
+.TH SHACRYPT 1 "version 1.2.1" "November 15, 2009"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+
+.SH NAME
+SHACrypt \- SHA1 enCRYPTion program
+
+.SH SYNOPSIS
+.B shacrypt
+.I command[args] password [file.in file.out]
+.br
+
+.SH DESCRIPTION
+This manual page briefly documents the \fBshacrypt\fP command.
+.PP
+\fBSHACrypt\fP is a small console application that allows users to encrypt
+files using cryptographic hash functions as a cypher. It supports
asymmetric
+encryption, but not public key encryption.
+
+.SH OPTIONS
+.TP
+.B a
+Preform asymmetric encryption \- the file must be a valid SHACrypt 1.1 or
+higher file. This feature was introduced in version 1.1.1. The only
difference
+between asymmetric encryption in 1.1.1+ and normal encryption in 1.0.x is
+the file header. The asymmetric option should be used when the decrypted
+version of the file cannot be transmitted and the password must be kept
secret.
+.TP
+.B c
+Compatibility (pre-1.1) mode \- the file will have no header and no random
+seed. This mode must be used to decrypt SHACrypt 1.0.x files or make files
+that are readable by SHACrypt 1.0.x.
+.TP
+.B d
+Decrypt a file that is in a 1.1+ format. This must be used for files from
+1.1.x or higher, and will provide backwards compatibility if the file
format
+is ever changed again.
+.TP
+.B e
+Encrypt a file using the newest (1.2+) format. This is considerably more
secure
+than compatibility mode, but will add at least 22 bytes to the filesize.
+.TP
+.B h
+Display help about the usage of SHACrypt. No arguments are needed.
+.TP
+.B ha
+Display help about asymmetric encryption. No arguments are needed.
+.TP
+.B he
+Display help about advanced encryption. No arguments are needed.
+
+.SH BUGS
+Please send any comments or bug reports to \fBsha...@googlegroups.com\fP.
+
+.SH HOMEPAGE
+http://shacrypt.googlecode.com/
=======================================
--- /dev/null
+++ /src/Makefile.am Sat Feb 27 09:31:24 2010
@@ -0,0 +1,30 @@
+## Process this file with automake to produce Makefile.in
+
+EXTRA_PROGRAMS = shacrypt-gui
+EXTRA_DIST = third-party shacrypt.glade glade.sed
+
+include_HEADERS = shacrypt.h
+
+lib_LIBRARIES = libshacrypt.a
+libshacrypt_a_SOURCES = shacrypt.h shacrypt.c third-party/sha1.c
third-party/sha2.c third-party/md5c.c third-party/cubehash.c
third-party/whirlpool.c
+libshacrypt_a_CFLAGS = $(DWINDOWS)
+
+GUI=
+if WANT_GUI
+ GUI = shacrypt-gui$(EXEEXT)
+endif
+
+bin_PROGRAMS = shacrypt $(GUI)
+shacrypt_SOURCES = commandline.c shacrypt.h
+shacrypt_LDADD = libshacrypt.a
+
+BUILT_SOURCES = glade.h
+CLEANFILES = glade.h
+
+glade.h: shacrypt.glade glade.sed Makefile
+ $(SED) -f $(srcdir)/glade.sed -e 's/[@]VERSION[@]/$(VERSION)/g' <
$(srcdir)/shacrypt.glade > glade.h
+
+shacrypt_gui_SOURCES = gui.c shacrypt.h shacrypt-icon.h
+nodist_shacrypt_gui_SOURCES = glade.h
+shacrypt_gui_LDADD = libshacrypt.a $(GUI_LIBS)
+shacrypt_gui_CFLAGS = $(GUI_CFLAGS) $(MWINDOWS)
=======================================
--- /dev/null
+++ /src/Makefile.in Sat Feb 27 09:31:24 2010
@@ -0,0 +1,753 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+EXTRA_PROGRAMS = shacrypt-gui$(EXEEXT)
+bin_PROGRAMS = shacrypt$(EXEEXT) $(am__EXEEXT_1)
+subdir = src
+DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' |
\
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" \
+ "$(DESTDIR)$(includedir)"
+LIBRARIES = $(lib_LIBRARIES)
+AR = ar
+ARFLAGS = cru
+libshacrypt_a_AR = $(AR) $(ARFLAGS)
+libshacrypt_a_LIBADD =
+am__dirstamp = $(am__leading_dot)dirstamp
+am_libshacrypt_a_OBJECTS = libshacrypt_a-shacrypt.$(OBJEXT) \
+ third-party/libshacrypt_a-sha1.$(OBJEXT) \
+ third-party/libshacrypt_a-sha2.$(OBJEXT) \
+ third-party/libshacrypt_a-md5c.$(OBJEXT) \
+ third-party/libshacrypt_a-cubehash.$(OBJEXT) \
+ third-party/libshacrypt_a-whirlpool.$(OBJEXT)
+libshacrypt_a_OBJECTS = $(am_libshacrypt_a_OBJECTS)
+am__EXEEXT_1 =
+PROGRAMS = $(bin_PROGRAMS)
+am_shacrypt_OBJECTS = commandline.$(OBJEXT)
+shacrypt_OBJECTS = $(am_shacrypt_OBJECTS)
+shacrypt_DEPENDENCIES = libshacrypt.a
+am_shacrypt_gui_OBJECTS = shacrypt_gui-gui.$(OBJEXT)
+nodist_shacrypt_gui_OBJECTS =
+shacrypt_gui_OBJECTS = $(am_shacrypt_gui_OBJECTS) \
+ $(nodist_shacrypt_gui_OBJECTS)
+am__DEPENDENCIES_1 =
+shacrypt_gui_DEPENDENCIES = libshacrypt.a $(am__DEPENDENCIES_1)
+shacrypt_gui_LINK = $(CCLD) $(shacrypt_gui_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(libshacrypt_a_SOURCES) $(shacrypt_SOURCES) \
+ $(shacrypt_gui_SOURCES) $(nodist_shacrypt_gui_SOURCES)
+DIST_SOURCES = $(libshacrypt_a_SOURCES) $(shacrypt_SOURCES) \
+ $(shacrypt_gui_SOURCES)
+HEADERS = $(include_HEADERS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+COMMANDLINE = @COMMANDLINE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DWINDOWS = @DWINDOWS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+GUI_CFLAGS = @GUI_CFLAGS@
+GUI_LIBS = @GUI_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MWINDOWS = @MWINDOWS@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = third-party shacrypt.glade glade.sed
+include_HEADERS = shacrypt.h
+lib_LIBRARIES = libshacrypt.a
+libshacrypt_a_SOURCES = shacrypt.h shacrypt.c third-party/sha1.c
third-party/sha2.c third-party/md5c.c third-party/cubehash.c
third-party/whirlpool.c
+libshacrypt_a_CFLAGS = $(DWINDOWS)
+GUI =
+shacrypt_SOURCES = commandline.c shacrypt.h
+shacrypt_LDADD = libshacrypt.a
+BUILT_SOURCES = glade.h
+CLEANFILES = glade.h
+shacrypt_gui_SOURCES = gui.c shacrypt.h shacrypt-icon.h
+nodist_shacrypt_gui_SOURCES = glade.h
+shacrypt_gui_LDADD = libshacrypt.a $(GUI_LIBS)
+shacrypt_gui_CFLAGS = $(GUI_CFLAGS) $(MWINDOWS)
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits src/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnits src/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
$(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
$(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure
$(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-libLIBRARIES: $(lib_LIBRARIES)
+ @$(NORMAL_INSTALL)
+ test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
+ @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \
+ list2=; for p in $$list; do \
+ if test -f $$p; then \
+ list2="$$list2 $$p"; \
+ else :; fi; \
+ done; \
+ test -z "$$list2" || { \
+ echo " $(INSTALL_DATA) $$list2 '$(DESTDIR)$(libdir)'"; \
+ $(INSTALL_DATA) $$list2 "$(DESTDIR)$(libdir)" || exit $$?; }
+ @$(POST_INSTALL)
+ @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \
+ for p in $$list; do \
+ if test -f $$p; then \
+ $(am__strip_dir) \
+ echo " ( cd '$(DESTDIR)$(libdir)' && $(RANLIB) $$f )"; \
+ ( cd "$(DESTDIR)$(libdir)" && $(RANLIB) $$f ) || exit $$?; \
+ else :; fi; \
+ done
+
+uninstall-libLIBRARIES:
+ @$(NORMAL_UNINSTALL)
+ @list='$(lib_LIBRARIES)'; test -n "$(libdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(libdir)' && rm -f "$$files" )"; \
+ cd "$(DESTDIR)$(libdir)" && rm -f $$files
+
+clean-libLIBRARIES:
+ -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
+third-party/$(am__dirstamp):
+ @$(MKDIR_P) third-party
+ @: > third-party/$(am__dirstamp)
+third-party/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) third-party/$(DEPDIR)
+ @: > third-party/$(DEPDIR)/$(am__dirstamp)
+third-party/libshacrypt_a-sha1.$(OBJEXT): third-party/$(am__dirstamp) \
+ third-party/$(DEPDIR)/$(am__dirstamp)
+third-party/libshacrypt_a-sha2.$(OBJEXT): third-party/$(am__dirstamp) \
+ third-party/$(DEPDIR)/$(am__dirstamp)
+third-party/libshacrypt_a-md5c.$(OBJEXT): third-party/$(am__dirstamp) \
+ third-party/$(DEPDIR)/$(am__dirstamp)
+third-party/libshacrypt_a-cubehash.$(OBJEXT): \
+ third-party/$(am__dirstamp) \
+ third-party/$(DEPDIR)/$(am__dirstamp)
+third-party/libshacrypt_a-whirlpool.$(OBJEXT): \
+ third-party/$(am__dirstamp) \
+ third-party/$(DEPDIR)/$(am__dirstamp)
+libshacrypt.a: $(libshacrypt_a_OBJECTS) $(libshacrypt_a_DEPENDENCIES)
+ -rm -f libshacrypt.a
+ $(libshacrypt_a_AR) libshacrypt.a $(libshacrypt_a_OBJECTS)
$(libshacrypt_a_LIBADD)
+ $(RANLIB) libshacrypt.a
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p; \
+ then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM)
$$files '$(DESTDIR)$(bindir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM)
$$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+installcheck-binPROGRAMS: $(bin_PROGRAMS)
+ bad=0; pid=$$$$; list="$(bin_PROGRAMS)"; for p in $$list; do \
+ case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \
+ *" $$p "* | *" $(srcdir)/$$p "*) continue;; \
+ esac; \
+ f=`echo "$$p" | \
+ sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+ for opt in --help --version; do \
+ if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \
+ 2>c$${pid}_.err </dev/null \
+ && test -n "`cat c$${pid}_.out`" \
+ && test -z "`cat c$${pid}_.err`"; then :; \
+ else echo "$$f does not support $$opt" 1>&2; bad=1; fi; \
+ done; \
+ done; rm -f c$${pid}_.???; exit $$bad
+shacrypt$(EXEEXT): $(shacrypt_OBJECTS) $(shacrypt_DEPENDENCIES)
+ @rm -f shacrypt$(EXEEXT)
+ $(LINK) $(shacrypt_OBJECTS) $(shacrypt_LDADD) $(LIBS)
+shacrypt-gui$(EXEEXT): $(shacrypt_gui_OBJECTS) $(shacrypt_gui_DEPENDENCIES)
+ @rm -f shacrypt-gui$(EXEEXT)
+ $(shacrypt_gui_LINK) $(shacrypt_gui_OBJECTS) $(shacrypt_gui_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+ -rm -f third-party/libshacrypt_a-cubehash.$(OBJEXT)
+ -rm -f third-party/libshacrypt_a-md5c.$(OBJEXT)
+ -rm -f third-party/libshacrypt_a-sha1.$(OBJEXT)
+ -rm -f third-party/libshacrypt_a-sha2.$(OBJEXT)
+ -rm -f third-party/libshacrypt_a-whirlpool.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/commandline.Po@am__quote@
+@AMDEP_TRUE@@am__include@
@am__quote@./$(DEPDIR)/libshacrypt_a-shacrypt.Po@am__quote@
+@AMDEP_TRUE@@am__include@
@am__quote@./$(DEPDIR)/shacrypt_gui-gui.Po@am__quote@
+@AMDEP_TRUE@@am__include@
@am__quote@third-party/$(DEPDIR)/libshacrypt_a-cubehash.Po@am__quote@
+@AMDEP_TRUE@@am__include@
@am__quote@third-party/$(DEPDIR)/libshacrypt_a-md5c.Po@am__quote@
+@AMDEP_TRUE@@am__include@
@am__quote@third-party/$(DEPDIR)/libshacrypt_a-sha1.Po@am__quote@
+@AMDEP_TRUE@@am__include@
@am__quote@third-party/$(DEPDIR)/libshacrypt_a-sha2.Po@am__quote@
+@AMDEP_TRUE@@am__include@
@am__quote@third-party/$(DEPDIR)/libshacrypt_a-whirlpool.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|
\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@
$< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no
@AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp)
@AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|
\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@
`$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no
@AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp)
@AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+libshacrypt_a-shacrypt.o: shacrypt.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -MT
libshacrypt_a-shacrypt.o -MD -MP -MF $(DEPDIR)/libshacrypt_a-shacrypt.Tpo
-c -o libshacrypt_a-shacrypt.o `test -f 'shacrypt.c' ||
echo '$(srcdir)/'`shacrypt.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libshacrypt_a-shacrypt.Tpo
$(DEPDIR)/libshacrypt_a-shacrypt.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shacrypt.c'
object='libshacrypt_a-shacrypt.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp)
@AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -c -o
libshacrypt_a-shacrypt.o `test -f 'shacrypt.c' ||
echo '$(srcdir)/'`shacrypt.c
+
+libshacrypt_a-shacrypt.obj: shacrypt.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -MT
libshacrypt_a-shacrypt.obj -MD -MP -MF $(DEPDIR)/libshacrypt_a-shacrypt.Tpo
-c -o libshacrypt_a-shacrypt.obj `if test -f 'shacrypt.c'; then
$(CYGPATH_W) 'shacrypt.c'; else $(CYGPATH_W) '$(srcdir)/shacrypt.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libshacrypt_a-shacrypt.Tpo
$(DEPDIR)/libshacrypt_a-shacrypt.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shacrypt.c'
object='libshacrypt_a-shacrypt.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp)
@AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -c -o
libshacrypt_a-shacrypt.obj `if test -f 'shacrypt.c'; then
$(CYGPATH_W) 'shacrypt.c'; else $(CYGPATH_W) '$(srcdir)/shacrypt.c'; fi`
+
+third-party/libshacrypt_a-sha1.o: third-party/sha1.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -MT
third-party/libshacrypt_a-sha1.o -MD -MP -MF
third-party/$(DEPDIR)/libshacrypt_a-sha1.Tpo -c -o
third-party/libshacrypt_a-sha1.o `test -f 'third-party/sha1.c' ||
echo '$(srcdir)/'`third-party/sha1.c
+@am__fastdepCC_TRUE@ $(am__mv)
third-party/$(DEPDIR)/libshacrypt_a-sha1.Tpo
third-party/$(DEPDIR)/libshacrypt_a-sha1.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='third-party/sha1.c'
object='third-party/libshacrypt_a-sha1.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp)
@AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -c -o
third-party/libshacrypt_a-sha1.o `test -f 'third-party/sha1.c' ||
echo '$(srcdir)/'`third-party/sha1.c
+
+third-party/libshacrypt_a-sha1.obj: third-party/sha1.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -MT
third-party/libshacrypt_a-sha1.obj -MD -MP -MF
third-party/$(DEPDIR)/libshacrypt_a-sha1.Tpo -c -o
third-party/libshacrypt_a-sha1.obj `if test -f 'third-party/sha1.c'; then
$(CYGPATH_W) 'third-party/sha1.c'; else
$(CYGPATH_W) '$(srcdir)/third-party/sha1.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv)
third-party/$(DEPDIR)/libshacrypt_a-sha1.Tpo
third-party/$(DEPDIR)/libshacrypt_a-sha1.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='third-party/sha1.c'
object='third-party/libshacrypt_a-sha1.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp)
@AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -c -o
third-party/libshacrypt_a-sha1.obj `if test -f 'third-party/sha1.c'; then
$(CYGPATH_W) 'third-party/sha1.c'; else
$(CYGPATH_W) '$(srcdir)/third-party/sha1.c'; fi`
+
+third-party/libshacrypt_a-sha2.o: third-party/sha2.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -MT
third-party/libshacrypt_a-sha2.o -MD -MP -MF
third-party/$(DEPDIR)/libshacrypt_a-sha2.Tpo -c -o
third-party/libshacrypt_a-sha2.o `test -f 'third-party/sha2.c' ||
echo '$(srcdir)/'`third-party/sha2.c
+@am__fastdepCC_TRUE@ $(am__mv)
third-party/$(DEPDIR)/libshacrypt_a-sha2.Tpo
third-party/$(DEPDIR)/libshacrypt_a-sha2.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='third-party/sha2.c'
object='third-party/libshacrypt_a-sha2.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp)
@AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -c -o
third-party/libshacrypt_a-sha2.o `test -f 'third-party/sha2.c' ||
echo '$(srcdir)/'`third-party/sha2.c
+
+third-party/libshacrypt_a-sha2.obj: third-party/sha2.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -MT
third-party/libshacrypt_a-sha2.obj -MD -MP -MF
third-party/$(DEPDIR)/libshacrypt_a-sha2.Tpo -c -o
third-party/libshacrypt_a-sha2.obj `if test -f 'third-party/sha2.c'; then
$(CYGPATH_W) 'third-party/sha2.c'; else
$(CYGPATH_W) '$(srcdir)/third-party/sha2.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv)
third-party/$(DEPDIR)/libshacrypt_a-sha2.Tpo
third-party/$(DEPDIR)/libshacrypt_a-sha2.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='third-party/sha2.c'
object='third-party/libshacrypt_a-sha2.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp)
@AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -c -o
third-party/libshacrypt_a-sha2.obj `if test -f 'third-party/sha2.c'; then
$(CYGPATH_W) 'third-party/sha2.c'; else
$(CYGPATH_W) '$(srcdir)/third-party/sha2.c'; fi`
+
+third-party/libshacrypt_a-md5c.o: third-party/md5c.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -MT
third-party/libshacrypt_a-md5c.o -MD -MP -MF
third-party/$(DEPDIR)/libshacrypt_a-md5c.Tpo -c -o
third-party/libshacrypt_a-md5c.o `test -f 'third-party/md5c.c' ||
echo '$(srcdir)/'`third-party/md5c.c
+@am__fastdepCC_TRUE@ $(am__mv)
third-party/$(DEPDIR)/libshacrypt_a-md5c.Tpo
third-party/$(DEPDIR)/libshacrypt_a-md5c.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='third-party/md5c.c'
object='third-party/libshacrypt_a-md5c.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp)
@AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -c -o
third-party/libshacrypt_a-md5c.o `test -f 'third-party/md5c.c' ||
echo '$(srcdir)/'`third-party/md5c.c
+
+third-party/libshacrypt_a-md5c.obj: third-party/md5c.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -MT
third-party/libshacrypt_a-md5c.obj -MD -MP -MF
third-party/$(DEPDIR)/libshacrypt_a-md5c.Tpo -c -o
third-party/libshacrypt_a-md5c.obj `if test -f 'third-party/md5c.c'; then
$(CYGPATH_W) 'third-party/md5c.c'; else
$(CYGPATH_W) '$(srcdir)/third-party/md5c.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv)
third-party/$(DEPDIR)/libshacrypt_a-md5c.Tpo
third-party/$(DEPDIR)/libshacrypt_a-md5c.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='third-party/md5c.c'
object='third-party/libshacrypt_a-md5c.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp)
@AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -c -o
third-party/libshacrypt_a-md5c.obj `if test -f 'third-party/md5c.c'; then
$(CYGPATH_W) 'third-party/md5c.c'; else
$(CYGPATH_W) '$(srcdir)/third-party/md5c.c'; fi`
+
+third-party/libshacrypt_a-cubehash.o: third-party/cubehash.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -MT
third-party/libshacrypt_a-cubehash.o -MD -MP -MF
third-party/$(DEPDIR)/libshacrypt_a-cubehash.Tpo -c -o
third-party/libshacrypt_a-cubehash.o `test -f 'third-party/cubehash.c' ||
echo '$(srcdir)/'`third-party/cubehash.c
+@am__fastdepCC_TRUE@ $(am__mv)
third-party/$(DEPDIR)/libshacrypt_a-cubehash.Tpo
third-party/$(DEPDIR)/libshacrypt_a-cubehash.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='third-party/cubehash.c'
object='third-party/libshacrypt_a-cubehash.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp)
@AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -c -o
third-party/libshacrypt_a-cubehash.o `test -f 'third-party/cubehash.c' ||
echo '$(srcdir)/'`third-party/cubehash.c
+
+third-party/libshacrypt_a-cubehash.obj: third-party/cubehash.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -MT
third-party/libshacrypt_a-cubehash.obj -MD -MP -MF
third-party/$(DEPDIR)/libshacrypt_a-cubehash.Tpo -c -o
third-party/libshacrypt_a-cubehash.obj `if test
-f 'third-party/cubehash.c'; then $(CYGPATH_W) 'third-party/cubehash.c';
else $(CYGPATH_W) '$(srcdir)/third-party/cubehash.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv)
third-party/$(DEPDIR)/libshacrypt_a-cubehash.Tpo
third-party/$(DEPDIR)/libshacrypt_a-cubehash.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='third-party/cubehash.c'
object='third-party/libshacrypt_a-cubehash.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp)
@AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -c -o
third-party/libshacrypt_a-cubehash.obj `if test
-f 'third-party/cubehash.c'; then $(CYGPATH_W) 'third-party/cubehash.c';
else $(CYGPATH_W) '$(srcdir)/third-party/cubehash.c'; fi`
+
+third-party/libshacrypt_a-whirlpool.o: third-party/whirlpool.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -MT
third-party/libshacrypt_a-whirlpool.o -MD -MP -MF
third-party/$(DEPDIR)/libshacrypt_a-whirlpool.Tpo -c -o
third-party/libshacrypt_a-whirlpool.o `test -f 'third-party/whirlpool.c' ||
echo '$(srcdir)/'`third-party/whirlpool.c
+@am__fastdepCC_TRUE@ $(am__mv)
third-party/$(DEPDIR)/libshacrypt_a-whirlpool.Tpo
third-party/$(DEPDIR)/libshacrypt_a-whirlpool.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='third-party/whirlpool.c'
object='third-party/libshacrypt_a-whirlpool.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp)
@AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -c -o
third-party/libshacrypt_a-whirlpool.o `test -f 'third-party/whirlpool.c' ||
echo '$(srcdir)/'`third-party/whirlpool.c
+
+third-party/libshacrypt_a-whirlpool.obj: third-party/whirlpool.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -MT
third-party/libshacrypt_a-whirlpool.obj -MD -MP -MF
third-party/$(DEPDIR)/libshacrypt_a-whirlpool.Tpo -c -o
third-party/libshacrypt_a-whirlpool.obj `if test
-f 'third-party/whirlpool.c'; then $(CYGPATH_W) 'third-party/whirlpool.c';
else $(CYGPATH_W) '$(srcdir)/third-party/whirlpool.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv)
third-party/$(DEPDIR)/libshacrypt_a-whirlpool.Tpo
third-party/$(DEPDIR)/libshacrypt_a-whirlpool.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='third-party/whirlpool.c'
object='third-party/libshacrypt_a-whirlpool.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp)
@AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(libshacrypt_a_CFLAGS) $(CFLAGS) -c -o
third-party/libshacrypt_a-whirlpool.obj `if test
-f 'third-party/whirlpool.c'; then $(CYGPATH_W) 'third-party/whirlpool.c';
else $(CYGPATH_W) '$(srcdir)/third-party/whirlpool.c'; fi`
+
+shacrypt_gui-gui.o: gui.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(shacrypt_gui_CFLAGS) $(CFLAGS) -MT
shacrypt_gui-gui.o -MD -MP -MF $(DEPDIR)/shacrypt_gui-gui.Tpo -c -o
shacrypt_gui-gui.o `test -f 'gui.c' || echo '$(srcdir)/'`gui.c
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/shacrypt_gui-gui.Tpo
$(DEPDIR)/shacrypt_gui-gui.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gui.c'
object='shacrypt_gui-gui.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp)
@AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(shacrypt_gui_CFLAGS) $(CFLAGS) -c -o
shacrypt_gui-gui.o `test -f 'gui.c' || echo '$(srcdir)/'`gui.c
+
+shacrypt_gui-gui.obj: gui.c
+@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(shacrypt_gui_CFLAGS) $(CFLAGS) -MT
shacrypt_gui-gui.obj -MD -MP -MF $(DEPDIR)/shacrypt_gui-gui.Tpo -c -o
shacrypt_gui-gui.obj `if test -f 'gui.c'; then $(CYGPATH_W) 'gui.c'; else
$(CYGPATH_W) '$(srcdir)/gui.c'; fi`
+@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/shacrypt_gui-gui.Tpo
$(DEPDIR)/shacrypt_gui-gui.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gui.c'
object='shacrypt_gui-gui.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp)
@AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(AM_CPPFLAGS) $(CPPFLAGS) $(shacrypt_gui_CFLAGS) $(CFLAGS) -c -o
shacrypt_gui-gui.obj `if test -f 'gui.c'; then $(CYGPATH_W) 'gui.c'; else
$(CYGPATH_W) '$(srcdir)/gui.c'; fi`
+install-includeHEADERS: $(include_HEADERS)
+ @$(NORMAL_INSTALL)
+ test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)"
+ @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \
+ done
+
+uninstall-includeHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ test -n "$$files" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(includedir)" && rm -f $$files
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {}
\;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {}
\;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(HEADERS)
+installdirs:
+ for dir
in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(includedir)";
do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f
$(CONFIG_CLEAN_VPATH_FILES)
+ -rm -f third-party/$(DEPDIR)/$(am__dirstamp)
+ -rm -f third-party/$(am__dirstamp)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libLIBRARIES \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR) third-party/$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-includeHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS install-libLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am: installcheck-binPROGRAMS
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR) third-party/$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-includeHEADERS \
+ uninstall-libLIBRARIES
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+ clean-generic clean-libLIBRARIES ctags distclean \
+ distclean-compile distclean-generic distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-binPROGRAMS install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-includeHEADERS install-info \
+ install-info-am install-libLIBRARIES install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installcheck-binPROGRAMS \
+ installdirs maintainer-clean maintainer-clean-generic \
+ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \
+ ps ps-am tags uninstall uninstall-am uninstall-binPROGRAMS \
+ uninstall-includeHEADERS uninstall-libLIBRARIES
+
+@WANT_GUI_TRUE@ GUI = shacrypt-gui$(EXEEXT)
+
+glade.h: shacrypt.glade glade.sed Makefile
+ $(SED) -f $(srcdir)/glade.sed -e 's/[@]VERSION[@]/$(VERSION)/g' <
$(srcdir)/shacrypt.glade > glade.h
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
=======================================
--- /dev/null
+++ /src/commandline.c Sat Feb 27 09:31:24 2010
@@ -0,0 +1,356 @@
+/**
+ * SHACrypt command line
+ *
+ * SHACrypt - Encrypt files using cryptographic hash functions
+ * Copyright (C) 2009 LlamaSlayers
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * 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, see <http://www.gnu.org/licenses/>.
+ *
+ * @since 1.1.2
+ * @version 1.2.2
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <time.h>
+#include "shacrypt.h"
+#include "../config.h"
+
+static const char identifier[3] = "\xA7\x09\xC3";
+
+/* Test for nonzero error code, exit with message if so */
+void test(int err, const char* msg) {
+ if (err) {
+ fprintf(stderr, "%s: error %d\n", msg, err);
+ exit(1);
+ }
+}
+
+/**
+ * Display the version number and copyright/licensing
+ * in a GNU-standard way.
+ *
+ * @since 1.2.2
+ * @version 1.2.2
+ */
+void showversion() {
+ printf( "%s (%s) %s\n"
+ "\n"
+ "Copyright (C) 2010 LlamaSlayers\n"
+ "License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>\n"
+ "This is free software: you are free to change and
redistribute it.\n"
+ "There is NO WARRANTY, to the extent permitted by law.\n",
+ PACKAGE_TARNAME, PACKAGE_NAME, PACKAGE_VERSION );
+}
+
+/**
+ * Handle all help-related commands
+ *
+ * @since 1.1.2
+ * @version 1.2
+ * @todo Make this use GNU style.
+ */
+void showhelp( char *appname, char *mode ) {
+ if ( strcmp( mode, "ha" ) == 0 ) {
+ printf( "SHACrypt %s: Asymmetric Encryption\n", PACKAGE_VERSION );
+ printf( "Please note: All steps are formed in the same way as
normal encryption, with the exception of the first argument (the e, a, or
d). See '%s h' for more details. In these examples, Alice is the sender and
Bob is the recipient. Between each step, the file would be transmitted to
the other person.\n", appname );
+ printf( " Step 1, Alice: Encryption - '%s e'\n", appname );
+ printf( " Step 2, Bob: Asymmetric encryption - '%s a'\n", appname
);
+ printf( " Step 3, Alice: Asymmetric decryption - '%s a'\n",
appname );
+ printf( " Step 4, Bob: Decryption - '%s d'\n", appname );
+ } else if ( strcmp( mode, "he" ) == 0 ) {
+ printf( "SHACrypt %s: Advanced encryption\n", PACKAGE_VERSION );
+ printf( "Appending letters to the \"%s e\" will change the hashing
algorithms used.\n", appname );
+ printf( " a - SHA1\n" );
+ printf( " b - SHA224\n" );
+ printf( " c - SHA256\n" );
+ printf( " d - SHA384\n" );
+ printf( " e - SHA512\n" );
+ printf( " f - MD5\n" );
+ printf( " g - CubeHash\n" );
+ printf( " h - WHIRLPOOL\n" );
+ printf( "Multiple letters can be combined. If none are used,
SHACrypt will default to SHA1.\n" );
+ } else {
+ printf( "SHACrypt %s\n", PACKAGE_VERSION );
+ printf( " Encrypt a file: %s e password file.in file.out\n",
appname );
+ printf( " Encrypt stdin: %s e password\n", appname );
+ printf( " Get a list of hash algorithms: %s he\n", appname );
+ printf( " Decrypt a file: %s d password file.in file.out\n",
appname );
+ printf( " Decrypt stdin: %s d password\n", appname );
+ printf( " Asymmetric encryption: See '%s ha' for more
information.\n", appname );
+ printf( " Old style encryption/decryption: %s c password file.in
file.out\n", appname );
+ printf( " Get this help: %s h\n", appname );
+ }
+}
+
+void encryptmode( int argc, char **argv ) {
+ int n;
+ FILE *f,
+ *o;
+ static char fbuf[256] = {0},
+ obuf[256] = {0};
+ SHACrypt_Context s;
+ unsigned char algos = '\0';
+
+ if ( strlen( argv[1] ) > 1 ) {
+ for ( n = 1; n < strlen( argv[1] ); n++ ) {
+ switch ( argv[1][n] ) {
+ case 'a': // SHA1
+ algos |= '\x01';
+ break;
+ case 'b': // SHA224
+ algos |= '\x02';
+ break;
+ case 'c': // SHA256
+ algos |= '\x04';
+ break;
+ case 'd': // SHA384
+ algos |= '\x08';
+ break;
+ case 'e': // SHA512
+ algos |= '\x10';
+ break;
+ case 'f': // MD5
+ algos |= '\x20';
+ break;
+ case 'g': // CubeHash
+ algos |= '\x40';
+ break;
+ case 'h': // WHIRLPOOL
+ algos |= '\x80';
+ break;
+ default:
+ fprintf( stderr, "Unknown switch: %c\n", argv[1][n] );
+ exit( 1 );
+ }
+ }
+ }
+
+ if ( algos == '\0' )
+ algos = '\x01';
+
+ if ( argc > 3 ) {
+ f = fopen( argv[3], "rb");
+ if ( !f ) {
+ perror( argv[3] );
+ exit( 1 );
+ }
+ o = fopen( argv[4], "wb" );
+ if ( !o ) {
+ perror( argv[4] );
+ exit( 1 );
+ }
+ } else {
+ f = stdin;
+ o = stdout;
+ }
+
+ n = SHACrypt_GetRand( algos, fbuf );
+ if ( n < 0 ) {
+ fprintf( stderr, "Warning: Could not connect to random number
generating device. Using weaker time-based random number generator.\n" );
+ n = -n;
+ }
+
+ SHACrypt_Init( &s, argv[2], strlen( argv[2] ), algos, fbuf, n );
+
+ fwrite( identifier, 1, 3, o ); // Identifier
+ fwrite( "\2\0", 1, 2, o ); // Format version
+ fputc( (unsigned char)(n - 1), o ); // Random seed length
+ fwrite( fbuf, 1, n, o ); // Random seed
+ fputc( algos, o ); // Hash alogithms used
+
+ /* Do the actual encryption */
+ while ( ( n = fread( fbuf, 1, 256, f ) ) > 0 ) {
+ SHACrypt_Process( &s, fbuf, obuf, n );
+
+ fwrite( obuf, 1, n, o );
+ }
+}
+
+void decryptmode( int argc, char **argv ) {
+ int n;
+ FILE *f,
+ *o;
+ static char fbuf[256] = {0},
+ obuf[256] = {0};
+ SHACrypt_Context s;
+ unsigned char algos,
+ randlen;
+
+ if ( argc > 3 ) {
+ f = fopen( argv[3], "rb");
+ if ( !f ) {
+ perror( argv[3] );
+ exit( 1 );
+ }
+ o = fopen( argv[4], "wb" );
+ if ( !o ) {
+ perror( argv[4] );
+ exit( 1 );
+ }
+ } else {
+ f = stdin;
+ o = stdout;
+ }
+
+ fread( fbuf, 1, 5, f );
+
+ test( strncmp( fbuf, identifier, 3 ), "SHACrypt File Identifier" );
+ if ( fbuf[3] == '\1' && fbuf[4] == '\0' ) {
+ randlen = '\x13';
+ fread( fbuf, 1, 20, f );
+ algos = '\x01';
+ } else if ( fbuf[3] == '\2' && fbuf[4] == '\0' ) {
+ randlen = fgetc( f );
+ fread( fbuf, 1, (int)randlen + 1, f );
+ algos = fgetc( f );
+ } else {
+ fprintf( stderr, "Input file was not in a format that could be
read by SHACrypt. (Maybe it's a newer version?)" );
+ exit( 1 );
+ }
+
+ SHACrypt_Init( &s, argv[2], strlen( argv[2] ), algos, fbuf,
(int)randlen + 1 );
+
+ /* Do the actual decryption */
+ while ( ( n = fread( fbuf, 1, 256, f ) ) > 0 ) {
+ SHACrypt_Process( &s, fbuf, obuf, n );
+
+ fwrite( obuf, 1, n, o );
+ }
+}
+
+void compatmode( int argc, char **argv ) {
+ int n;
+ FILE* f;
+ FILE* o;
+ static char fbuf[256] = {0},
+ obuf[256] = {0};
+ SHACrypt_Context s;
+
+ if ( argc > 3 ) {
+ f = fopen( argv[3], "rb");
+ if ( !f ) {
+ perror( argv[3] );
+ exit( 1 );
+ }
+ o = fopen( argv[4], "wb" );
+ if ( !o ) {
+ perror( argv[4] );
+ exit( 1 );
+ }
+ } else {
+ f = stdin;
+ o = stdout;
+ }
+
+ SHACrypt_Init( &s, argv[2], strlen( argv[2] ), '\x01', "", 0 );
+
+ /* Do the actual en/decryption */
+ while ( ( n = fread( fbuf, 1, 256, f ) ) > 0 ) {
+ SHACrypt_Process( &s, fbuf, obuf, n );
+
+ fwrite( obuf, 1, n, o );
+ }
+}
+
+void asymmetricmode( int argc, char **argv ) {
+ int n;
+ FILE *f,
+ *o;
+ static char fbuf[256] = {0},
+ obuf[256] = {0};
+ SHACrypt_Context s;
+ unsigned char algos,
+ randlen;
+
+ if ( argc > 3 ) {
+ f = fopen( argv[3], "rb");
+ if ( !f ) {
+ perror( argv[3] );
+ exit( 1 );
+ }
+ o = fopen( argv[4], "wb" );
+ if ( !o ) {
+ perror( argv[4] );
+ exit( 1 );
+ }
+ } else {
+ f = stdin;
+ o = stdout;
+ }
+
+ fread( fbuf, 1, 5, f );
+
+ test( strncmp( fbuf, identifier, 3 ), "SHACrypt File Identifier" );
+ if ( fbuf[3] == '\1' && fbuf[4] == '\0' ) {
+ randlen = '\x13';
+ fread( fbuf, 1, 20, f );
+ algos = '\x01';
+ } else if ( fbuf[3] == '\2' && fbuf[4] == '\0' ) {
+ randlen = fgetc( f );
+ fread( fbuf, 1, (int)randlen + 1, f );
+ algos = fgetc( f );
+ } else {
+ fprintf( stderr, "Input file was not in a format that could be
read by SHACrypt. (Maybe it's a newer version?)" );
+ exit( 1 );
+ }
+
+ fwrite( identifier, 1, 3, o ); // Identifier
+ fwrite( "\2\0", 1, 2, o ); // Format version
+ fputc( randlen, o ); // Random seed length
+ fwrite( fbuf, 1, (int)randlen + 1, o ); // Random seed
+ fputc( algos, o ); // Hash algorithms used
+
+ SHACrypt_Init( &s, argv[2], strlen( argv[2] ), algos, fbuf,
(int)randlen + 1 );
+
+ /* Do the actual encryption */
+ while ( ( n = fread( fbuf, 1, 256, f ) ) > 0 ) {
+ SHACrypt_Process( &s, fbuf, obuf, n );
+
+ fwrite( obuf, 1, n, o );
+ }
+}
+
+int main( int argc, char **argv ) {
+ if ( !argv[1] ) {
+ argv[1] = "h";
+ }
+ if ( strcmp( argv[1], "--help" ) == 0 ) {
+ argv[1] = "h--help";
+ } else if ( strcmp( argv[1], "--version" ) == 0 ) {
+ showversion();
+ return 0;
+ }
+
+ switch ( argv[1][0] ) {
+ case 'c':
+ compatmode( argc, argv );
+ break;
+ case 'e':
+ encryptmode( argc, argv );
+ break;
+ case 'd':
+ decryptmode( argc, argv );
+ break;
+ case 'a':
+ asymmetricmode( argc, argv );
+ break;
+ case 'h':
+ default:
+ showhelp( argv[0], argv[1] );
+ break;
+ }
+ return 0;
+}
=======================================
--- /dev/null
+++ /src/glade.sed Sat Feb 27 09:31:24 2010
@@ -0,0 +1,34 @@
+#!/bin/sed -f
+
+# SHACrypt graphical user interface (compile-time helper)
+#
+# SHACrypt - Encrypt files using cryptographic hash functions
+# Copyright (C) 2009 LlamaSlayers
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# 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, see <http://www.gnu.org/licenses/>.
+
+1i\
+#ifndef _SHACRYPT_GLADE_H_
+1i\
+#define _SHACRYPT_GLADE_H_
+1i\
+const char* shacrypt_glade =
+s/\\/\\\\/g
+s/"/\\"/g
+s/^.*$/"&\\n"/g
+$a\
+;
+$a\
+#endif
+
=======================================
--- /dev/null
+++ /src/gui.c Sat Feb 27 09:31:24 2010
@@ -0,0 +1,1168 @@
+/**
+ * SHACrypt graphical user interface
+ *
+ * SHACrypt - Encrypt files using cryptographic hash functions
+ * Copyright (C) 2009 LlamaSlayers
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * 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, see <http://www.gnu.org/licenses/>.
+ *
+ * @since 1.2.1
+ * @version 1.2.2
+ */
+
+#include <gtk/gtk.h>
+#include <gdk-pixbuf/gdk-pixdata.h>
+#include <stdio.h>
+#include <string.h>
+#include "shacrypt.h"
+#include "glade.h"
+#include "shacrypt-icon.h"
+
+static const char identifier[3] = "\xA7\x09\xC3";
+
+GtkBuilder* builder;
+
+/* Encryption */
+G_MODULE_EXPORT void button_pressed_encrypt( GtkWidget* button, gpointer
data ) {
+ GtkWidget* step1;
+ step1 = GTK_WIDGET( gtk_builder_get_object( builder, "encrypt_step1" )
);
+
+ gtk_widget_show( step1 );
+
+ g_free( step1 );
+}
+
+G_MODULE_EXPORT void encrypt_step1_cancel( GtkWidget* button, gpointer
data ) {
+ GtkWidget* step1;
+ step1 = GTK_WIDGET( gtk_builder_get_object( builder, "encrypt_step1" )
);
+
+ gtk_widget_hide( step1 );
+
+ g_free( step1 );
+}
+
+G_MODULE_EXPORT void encrypt_step1_ok( GtkWidget* button, gpointer data ) {
+ // Make sure there's actually a file selected.
+ GtkFileChooser* file;
+
+ file = GTK_FILE_CHOOSER( gtk_builder_get_object(
builder, "file_e1_select" ) );
+
+ if ( gtk_file_chooser_get_filename( file ) == NULL ) {
+ g_free( file );
+ return;
+ }
+
+ g_free( file );
+
+ // This part of the reset is here because Glade won't let me set
default values.
+ GtkToggleButton* sha1;
+ GtkToggleButton* sha224;
+ GtkToggleButton* sha256;
+ GtkToggleButton* sha384;
+ GtkToggleButton* sha512;
+ GtkToggleButton* md5;
+ GtkToggleButton* cubehash;
+ GtkToggleButton* whirlpool;
+ GtkToggleButton* randomseed;
+ GtkWidget* seed;
+
+ sha1 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_sha1" ) );
+ sha224 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_sha224" ) );
+ sha256 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_sha256" ) );
+ sha384 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_sha384" ) );
+ sha512 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_sha512" ) );
+ md5 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_md5" ) );
+ cubehash = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_cubehash" ) );
+ whirlpool = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_whirlpool" ) );
+ randomseed = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "radio_e2_randomseed_off" ) );
+ seed = GTK_WIDGET( gtk_builder_get_object(
builder, "hscale_e2_randomseed" ) );
+
+ gtk_toggle_button_set_active( sha1, TRUE );
+ gtk_toggle_button_set_active( sha224, FALSE );
+ gtk_toggle_button_set_active( sha256, FALSE );
+ gtk_toggle_button_set_active( sha384, FALSE );
+ gtk_toggle_button_set_active( sha512, FALSE );
+ gtk_toggle_button_set_active( md5, FALSE );
+ gtk_toggle_button_set_active( cubehash, FALSE );
+ gtk_toggle_button_set_active( whirlpool, FALSE );
+ gtk_toggle_button_set_active( randomseed, TRUE );
+ gtk_widget_set_sensitive( seed, FALSE );
+ gtk_range_set_value( GTK_RANGE( seed ), 20.0 );
+
+ g_free( sha1 );
+ g_free( sha224 );
+ g_free( sha256 );
+ g_free( sha384 );
+ g_free( sha512 );
+ g_free( md5 );
+ g_free( cubehash );
+ g_free( whirlpool );
+ g_free( randomseed );
+ g_free( seed );
+
+ // Now on to the actual displaying part.
+ GtkWidget* step1;
+ GtkWidget* step2;
+
+ step1 = GTK_WIDGET( gtk_builder_get_object( builder, "encrypt_step1" )
);
+ step2 = GTK_WIDGET( gtk_builder_get_object( builder, "encrypt_step2" )
);
+
+ gtk_widget_show( step2 );
+ gtk_widget_hide( step1 );
+
+ g_free( step1 );
+ g_free( step2 );
+}
+
+/* Password scoring method adapted from
+ * http://www.geekwisdom.com/js/passwordmeter.js
+ */
+G_MODULE_EXPORT void encrypt_step2_passchange( GtkEntry* button, gpointer
data ) {
+ GtkProgressBar* meter;
+
+ meter = GTK_PROGRESS_BAR( gtk_builder_get_object(
builder, "progressbar_e2_pass_strength" ) );
+
+ int len = gtk_entry_get_text_length( button );
+ const char* pass = gtk_entry_get_text( button );
+
+ if ( len == 0 ) {
+ gtk_progress_bar_set_fraction( meter, 0.0 );
+ gtk_progress_bar_set_text( meter, "Enter a password." );
+
+ g_free( meter );
+
+ return;
+ }
+
+ int score, i,
+ lower = 0,
+ upper = 0,
+ num = 0,
+ symb = 0;
+
+ // Total length
+ if ( len > 15 ) {
+ score = 18;
+ } else if ( len > 7 ) {
+ score = 12;
+ } else if ( len > 4 ) {
+ score = 6;
+ } else {
+ score = 3;
+ }
+
+ for ( i = 0; i < len; i++ ) {
+ if ( pass[i] >= 'a' && pass[i] <= 'z' )
+ lower++;
+ else if ( pass[i] >= 'A' && pass[i] <= 'Z' )
+ upper++;
+ else if ( pass[i] >= '0' && pass[i] <= '9' )
+ num++;
+ else
+ symb++;
+ }
+
+ // Letters
+ if ( lower || upper )
+ score += 1;
+ if ( lower && upper )
+ score += 2;
+ if ( lower + upper > 1 )
+ score += 2;
+ if ( lower > 1 && upper > 1 )
+ score += 2;
+
+ // Numbers
+ if ( num == 1 )
+ score += 5;
+ if ( num > 1 )
+ score += 7;
+
+ // Symbols
+ if ( symb == 1 )
+ score += 5;
+ if ( symb > 1 )
+ score += 7;
+
+ // Combinations
+ if ( ( upper || lower ) && num )
+ score++;
+ if ( upper && lower )
+ score++;
+ if ( ( upper || lower ) && num && symb )
+ score += 2;
+ if ( upper && lower && num && symb )
+ score += 2;
+
+ gtk_progress_bar_set_fraction( meter, score / 45.0 );
+ if ( score == 45 )
+ gtk_progress_bar_set_text( meter, "Excellent" );
+ else if ( score > 39 )
+ gtk_progress_bar_set_text( meter, "Secure" );
+ else if ( score > 24 )
+ gtk_progress_bar_set_text( meter, "Good" );
+ else if ( score > 9 )
+ gtk_progress_bar_set_text( meter, "Ok" );
+ else
+ gtk_progress_bar_set_text( meter, "Bad" );
+
+ g_free( meter );
+}
+
+G_MODULE_EXPORT unsigned char encrypt_step2_get_algos() {
+ unsigned char algos = '\0';
+
+ GtkToggleButton* sha1;
+ GtkToggleButton* sha224;
+ GtkToggleButton* sha256;
+ GtkToggleButton* sha384;
+ GtkToggleButton* sha512;
+ GtkToggleButton* md5;
+ GtkToggleButton* cubehash;
+ GtkToggleButton* whirlpool;
+
+ sha1 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_sha1" ) );
+ sha224 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_sha224" ) );
+ sha256 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_sha256" ) );
+ sha384 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_sha384" ) );
+ sha512 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_sha512" ) );
+ md5 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_md5" ) );
+ cubehash = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_cubehash" ) );
+ whirlpool = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_whirlpool" ) );
+
+ if ( gtk_toggle_button_get_active( sha1 ) )
+ algos |= '\x01';
+ if ( gtk_toggle_button_get_active( sha224 ) )
+ algos |= '\x02';
+ if ( gtk_toggle_button_get_active( sha256 ) )
+ algos |= '\x04';
+ if ( gtk_toggle_button_get_active( sha384 ) )
+ algos |= '\x08';
+ if ( gtk_toggle_button_get_active( sha512 ) )
+ algos |= '\x10';
+ if ( gtk_toggle_button_get_active( md5 ) )
+ algos |= '\x20';
+ if ( gtk_toggle_button_get_active( cubehash ) )
+ algos |= '\x40';
+ if ( gtk_toggle_button_get_active( whirlpool ) )
+ algos |= '\x80';
+
+ g_free( sha1 );
+ g_free( sha224 );
+ g_free( sha256 );
+ g_free( sha384 );
+ g_free( sha512 );
+ g_free( md5 );
+ g_free( cubehash );
+ g_free( whirlpool );
+
+ return algos;
+}
+
+G_MODULE_EXPORT void encrypt_step2_check_hashalgo( GtkWidget* button,
gpointer data ) {
+ int seedlen = SHACrypt_GetLength( encrypt_step2_get_algos() );
+ if ( !seedlen ) {
+ GtkToggleButton* sha1;
+ sha1 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_sha1" ) );
+
+ gtk_toggle_button_set_active( sha1, TRUE );
+
+ seedlen = 20;
+ }
+
+ GtkToggleButton* randomseed;
+ GtkWidget* seed;
+
+ randomseed = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "radio_e2_randomseed_off" ) );
+ seed = GTK_WIDGET( gtk_builder_get_object(
builder, "hscale_e2_randomseed" ) );
+
+ if ( gtk_toggle_button_get_active( randomseed ) ) {
+ gtk_widget_set_sensitive( seed, FALSE );
+
+ gtk_range_set_value( GTK_RANGE( seed ), (gdouble)seedlen );
+ } else {
+ gtk_widget_set_sensitive( seed, TRUE );
+ }
+
+ g_free( randomseed );
+ g_free( seed );
+}
+
+G_MODULE_EXPORT void encrypt_step3() {
+ GtkWindow* step3;
+ GtkEntry* pass;
+ GtkFileChooser* file;
+ GtkProgressBar* progress;
+ GtkRange* seedlen;
+
+ step3 = GTK_WINDOW( gtk_builder_get_object( builder, "encrypt_step3" )
);
+ pass = GTK_ENTRY( gtk_builder_get_object(
builder, "field_e2_password1" ) );
+ file = GTK_FILE_CHOOSER( gtk_builder_get_object(
builder, "file_e1_select" ) );
+ progress = GTK_PROGRESS_BAR( gtk_builder_get_object(
builder, "progressbar_e3_progress" ) );
+ seedlen = GTK_RANGE( gtk_builder_get_object(
builder, "hscale_e2_randomseed" ) );
+
+ gtk_progress_bar_set_text( progress, NULL );
+ gtk_window_set_deletable( step3, FALSE );
+
+ FILE* f;
+ FILE* o;
+ unsigned long i, n,
+ size;
+ SHACrypt_Context s;
+ unsigned char algos = encrypt_step2_get_algos();
+ static char fbuf[256] = {0},
+ obuf[256] = {0},
+ tmp[1024] = {0};
+ char* filename;
+
+ filename = gtk_file_chooser_get_filename( file );
+ g_free( file );
+
+ n = (int)gtk_range_get_value( seedlen );
+ g_free( seedlen );
+
+ f = fopen( filename, "rb" );
+
+ sprintf( tmp, "%s.shacrypt", filename );
+
+ i = 0;
+ while ( ( o = fopen( tmp, "rb" ) ) != NULL ) {
+ g_free( o );
+ i++;
+ sprintf( tmp, "%s_%lu.shacrypt", filename, i );
+ }
+
+ o = fopen( tmp, "wb" );
+
+ g_free( tmp );
+ g_free( filename );
+
+ for ( i = 0; i < n; i++ )
+ fbuf[i] = g_random_int_range( 0, 255 );
+
+ SHACrypt_Init( &s, (char*)gtk_entry_get_text( pass ),
gtk_entry_get_text_length( pass ), algos, fbuf, n );
+ g_free( pass );
+
+ fwrite( identifier, 1, 3, o ); // Identifier
+ fwrite( "\2\0", 1, 2, o ); // Format version
+ fputc( (unsigned char)(n - 1), o ); // Random seed length
+ fwrite( fbuf, 1, n, o ); // Random seed
+ fputc( algos, o ); // Hash alogithms used
+
+ fseek( f, 0, SEEK_END );
+ size = ftell( f );
+ fseek( f, 0, SEEK_SET );
+
+ i = 0;
+
+ /* Do the actual encryption */
+ while ( ( n = fread( fbuf, 1, 256, f ) ) > 0 ) {
+ i += n;
+
+ gtk_progress_bar_set_fraction( progress, (double)i / size );
+
+ SHACrypt_Process( &s, fbuf, obuf, n );
+
+ fwrite( obuf, 1, n, o );
+ }
+
+ fclose( f );
+ fclose( o );
+
+ g_free( f );
+ g_free( o );
+ g_free( fbuf );
+ g_free( obuf );
+
+ GtkEntry* pass1;
+ GtkEntry* pass2;
+ GtkProgressBar* meter;
+
+ pass1 = GTK_ENTRY( gtk_builder_get_object(
builder, "field_e2_password1" ) );
+ pass2 = GTK_ENTRY( gtk_builder_get_object(
builder, "field_e2_password2" ) );
+ meter = GTK_PROGRESS_BAR( gtk_builder_get_object(
builder, "progressbar_e2_pass_strength" ) );
+
+ gtk_entry_set_text( pass1, "" );
+ gtk_entry_set_text( pass2, "" );
+ gtk_progress_bar_set_text( meter, "Enter a password" );
+ gtk_progress_bar_set_fraction( meter, 0.0 );
+
+ g_free( pass1 );
+ g_free( pass2 );
+ g_free( meter );
+
+ gtk_progress_bar_set_text( progress, "Done!" );
+ gtk_window_set_deletable( step3, TRUE );
+
+ g_free( progress );
+ g_free( step3 );
+}
+
+G_MODULE_EXPORT void encrypt_step2_ok( GtkWidget* button, gpointer data ) {
+ GtkNotebook* tabs;
+ GtkEntry* pass1;
+ GtkEntry* pass2;
+
+ tabs = GTK_NOTEBOOK( gtk_builder_get_object(
builder, "notebook_e2_tabs" ) );
+ pass1 = GTK_ENTRY( gtk_builder_get_object(
builder, "field_e2_password1" ) );
+ pass2 = GTK_ENTRY( gtk_builder_get_object(
builder, "field_e2_password2" ) );
+
+ if ( !gtk_entry_get_text_length( pass1 ) ) {
+ gtk_notebook_set_current_page( tabs, 0 );
+ gtk_widget_grab_focus( GTK_WIDGET( pass1 ) );
+
+ g_free( pass1 );
+ g_free( pass2 );
+ g_free( tabs );
+
+ return;
+ }
+
+ if ( !gtk_entry_get_text_length( pass2 ) ) {
+ gtk_notebook_set_current_page( tabs, 0 );
+ gtk_widget_grab_focus( GTK_WIDGET( pass2 ) );
+
+ g_free( pass1 );
+ g_free( pass2 );
+ g_free( tabs );
+
+ return;
+ }
+
+ g_free( tabs );
+
+ if ( strcmp( gtk_entry_get_text( pass1 ), gtk_entry_get_text( pass2 )
) == 0 ) {
+ GtkWidget* step2;
+ GtkWidget* step3;
+
+ step2 = GTK_WIDGET( gtk_builder_get_object(
builder, "encrypt_step2" ) );
+ step3 = GTK_WIDGET( gtk_builder_get_object(
builder, "encrypt_step3" ) );
+
+ gtk_widget_show( step3 );
+ gtk_widget_hide( step2 );
+
+ g_free( step2 );
+ g_free( step3 );
+
+ g_thread_create( (GThreadFunc)encrypt_step3, NULL, FALSE, NULL );
+ } else {
+ GtkProgressBar* meter;
+
+ meter = GTK_PROGRESS_BAR( gtk_builder_get_object(
builder, "progressbar_e2_pass_strength" ) );
+
+ gtk_progress_bar_set_text( meter, "Passwords do not match!" );
+
+ g_free( meter );
+ }
+
+ g_free( pass1 );
+ g_free( pass2 );
+}
+
+G_MODULE_EXPORT void encrypt_step2_cancel( GtkWidget* button, gpointer
data ) {
+ GtkWidget* step2;
+ GtkEntry* pass1;
+ GtkEntry* pass2;
+ GtkProgressBar* meter;
+
+ step2 = GTK_WIDGET( gtk_builder_get_object( builder, "encrypt_step2" )
);
+ pass1 = GTK_ENTRY( gtk_builder_get_object(
builder, "field_e2_password1" ) );
+ pass2 = GTK_ENTRY( gtk_builder_get_object(
builder, "field_e2_password2" ) );
+ meter = GTK_PROGRESS_BAR( gtk_builder_get_object(
builder, "progressbar_e2_pass_strength" ) );
+
+ gtk_widget_hide( step2 );
+
+ gtk_entry_set_text( pass1, "" );
+ gtk_entry_set_text( pass2, "" );
+ gtk_progress_bar_set_text( meter, "Enter a password" );
+ gtk_progress_bar_set_fraction( meter, 0.0 );
+
+ g_free( step2 );
+ g_free( pass1 );
+ g_free( pass2 );
+ g_free( meter );
+}
+
+/* Decryption */
+G_MODULE_EXPORT void button_pressed_decrypt( GtkWidget* button, gpointer
data ) {
+ GtkWidget* step1;
+ step1 = GTK_WIDGET( gtk_builder_get_object( builder, "decrypt_step1" )
);
+
+ gtk_widget_show( step1 );
+
+ g_free( step1 );
+}
+
+G_MODULE_EXPORT void decrypt_step1_ok( GtkWidget* button, gpointer data ) {
+ GtkFileChooser* file;
+
+ file = GTK_FILE_CHOOSER( gtk_builder_get_object(
builder, "file_d1_select" ) );
+
+ // Make sure there's actually a file selected.
+ if ( gtk_file_chooser_get_filename( file ) == NULL ) {
+ g_free( file );
+ return;
+ }
+
+ // Make sure it's an SHACrypt file.
+ FILE* f;
+ char fbuf[5];
+
+ f = fopen( gtk_file_chooser_get_filename( file ), "rb" );
+ g_free( file );
+
+ if ( f == NULL || fread( fbuf, 1, 5, f ) != 5 )
+ strcpy( fbuf, "fail." ); // Make sure we have all 5 bytes set.
+
+ if ( f != NULL ) {
+ fclose( f );
+
+ g_free( f );
+ }
+
+ if ( strncmp( fbuf, identifier, 3 ) != 0 || fbuf[3] < '\1' || fbuf[3]
> '\2' || fbuf[4] != '\0' ) {
+ g_free( fbuf );
+
+ GtkWidget* invalid_file;
+
+ invalid_file = GTK_WIDGET( gtk_builder_get_object(
builder, "decrypt_step1_error_notshacrypt" ) );
+
+ gtk_widget_show( invalid_file );
+
+ g_free( invalid_file );
+
+ return;
+ }
+
+ GtkWidget* step1;
+ GtkWidget* step2;
+
+ step1 = GTK_WIDGET( gtk_builder_get_object( builder, "decrypt_step1" )
);
+ step2 = GTK_WIDGET( gtk_builder_get_object( builder, "decrypt_step2" )
);
+
+ gtk_widget_show( step2 );
+ gtk_widget_hide( step1 );
+
+ g_free( step1 );
+ g_free( step2 );
+}
+
+G_MODULE_EXPORT void decrypt_step1_cancel( GtkWidget* button, gpointer
data ) {
+ GtkWidget* step1;
+ step1 = GTK_WIDGET( gtk_builder_get_object( builder, "decrypt_step1" )
);
+
+ gtk_widget_hide( step1 );
+
+ g_free( step1 );
+}
+
+G_MODULE_EXPORT void decrypt_step1_error_ok( GtkWidget* button, gpointer
data ) {
+ GtkWidget* error;
+ error = GTK_WIDGET( gtk_builder_get_object(
builder, "decrypt_step1_error_notshacrypt" ) );
+
+ gtk_widget_hide( error );
+
+ g_free( error );
+}
+
+G_MODULE_EXPORT void decrypt_step3() {
+ GtkWindow* step3;
+ GtkEntry* pass;
+ GtkFileChooser* file;
+ GtkProgressBar* progress;
+
+ step3 = GTK_WINDOW( gtk_builder_get_object( builder, "decrypt_step3" )
);
+ pass = GTK_ENTRY( gtk_builder_get_object( builder, "field_d2_password"
) );
+ file = GTK_FILE_CHOOSER( gtk_builder_get_object(
builder, "file_d1_select" ) );
+ progress = GTK_PROGRESS_BAR( gtk_builder_get_object(
builder, "progressbar_d3_progress" ) );
+
+ gtk_progress_bar_set_text( progress, NULL );
+ gtk_window_set_deletable( step3, FALSE );
+
+ FILE* f;
+ FILE* o;
+ unsigned long i, size, n;
+ SHACrypt_Context s;
+ unsigned char algos = '\0',
+ randlen = '\0';
+ static char fbuf[256] = {0},
+ obuf[256] = {0};
+ char** filename = g_strsplit( gtk_file_chooser_get_filename( file
), ".", -1 );
+ char* filename_prefix;
+ char* filename_suffix;
+ char* tmp;
+
+ g_free( file );
+
+ f = fopen( g_strjoinv( ".", filename ), "rb" );
+
+ i = g_strv_length( filename );
+
+ if ( i == 2 ) {
+ filename_suffix = "";
+ filename_prefix = g_strdup( filename[0] );
+ } else {
+ n = strlen( filename[i - 1] ) + strlen( filename[i - 2] ) + 2;
+
+ filename_suffix = g_strconcat( ".", filename[i - 2], NULL );
+
+ tmp = g_strjoinv( ".", filename );
+ filename_prefix = g_strndup( tmp, strlen( tmp ) - n );
+ g_free( tmp );
+ }
+ g_strfreev( filename );
+
+ tmp = g_strdup_printf( "%s%s", filename_prefix, filename_suffix );
+
+
+ i = 0;
+ while ( fopen( tmp, "rb" ) != NULL ) {
+ g_free( tmp );
+ i++;
+ tmp = g_strdup_printf( "%s_%lu%s", filename_prefix, i,
filename_suffix );
+ }
+
+ o = fopen( tmp, "wb" );
+
+ g_free( tmp );
+ g_free( filename_prefix );
+ g_free( filename_suffix );
+
+ fread( fbuf, 1, 5, f );
+
+ if ( fbuf[3] == '\1' ) {
+ randlen = '\x13';
+ fread( fbuf, 1, 20, f );
+ algos = '\x01';
+ }
+ if ( fbuf[3] == '\2' ) {
+ randlen = fgetc( f );
+ fread( fbuf, 1, (int)randlen + 1, f );
+ algos = fgetc( f );
+ }
+
+ SHACrypt_Init( &s, g_strdup( gtk_entry_get_text( pass ) ),
gtk_entry_get_text_length( pass ), algos, fbuf, (int)randlen + 1 );
+
+ gtk_entry_set_text( pass, "" );
+
+ g_free( pass );
+
+ i = ftell( f );
+ fseek( f, 0, SEEK_END );
+ size = ftell( f ) - i;
+ fseek( f, i, SEEK_SET );
+
+ i = 0;
+ /* Do the actual encryption */
+ while ( ( n = fread( fbuf, 1, 256, f ) ) > 0 ) {
+ i += n;
+
+ gtk_progress_bar_set_fraction( progress, (double)i / size );
+
+ SHACrypt_Process( &s, fbuf, obuf, n );
+
+ fwrite( obuf, 1, n, o );
+ }
+
+ fclose( f );
+ fclose( o );
+
+ g_free( f );
+ g_free( o );
+ g_free( fbuf );
+ g_free( obuf );
+
+ gtk_progress_bar_set_text( progress, "Done!" );
+ gtk_window_set_deletable( step3, TRUE );
+
+ g_free( progress );
+ g_free( step3 );
+}
+
+G_MODULE_EXPORT void decrypt_step2_ok( GtkWidget* button, gpointer data ) {
+ GtkEntry* pass;
+
+ pass = GTK_ENTRY( gtk_builder_get_object( builder, "field_d2_password"
) );
+
+ if ( !gtk_entry_get_text_length( pass ) ) {
+ gtk_widget_grab_focus( GTK_WIDGET( pass ) );
+
+ g_free( pass );
+
+ return;
+ }
+ g_free( pass );
+
+ GtkWidget* step2;
+ GtkWidget* step3;
+
+ step2 = GTK_WIDGET( gtk_builder_get_object( builder, "decrypt_step2" )
);
+ step3 = GTK_WIDGET( gtk_builder_get_object( builder, "decrypt_step3" )
);
+
+ gtk_widget_show( step3 );
+ gtk_widget_hide( step2 );
+
+ g_free( step2 );
+ g_free( step3 );
+
+ g_thread_create( (GThreadFunc)decrypt_step3, NULL, FALSE, NULL );
+}
+
+G_MODULE_EXPORT void decrypt_step2_cancel( GtkWidget* button, gpointer
data ) {
+ GtkWidget* step2;
+ GtkEntry* pass;
+
+ step2 = GTK_WIDGET( gtk_builder_get_object( builder, "decrypt_step2" )
);
+ pass = GTK_ENTRY( gtk_builder_get_object( builder, "field_d2_password"
) );
+
+ gtk_widget_hide( step2 );
+ gtk_entry_set_text( pass, "" );
+
+ g_free( step2 );
+ g_free( pass );
+}
+
+/* Asymmetric */
+G_MODULE_EXPORT void button_pressed_asymmetric( GtkWidget* button,
gpointer data ) {
+ GtkWidget* step1;
+ step1 = GTK_WIDGET( gtk_builder_get_object(
builder, "asymmetric_step1" ) );
+
+ gtk_widget_show( step1 );
+
+ g_free( step1 );
+}
+
+G_MODULE_EXPORT void asymmetric_step1_cancel( GtkWidget* button, gpointer
data ) {
+ GtkWidget* step1;
+ step1 = GTK_WIDGET( gtk_builder_get_object(
builder, "asymmetric_step1" ) );
+
+ gtk_widget_hide( step1 );
+
+ g_free( step1 );
+}
+
+G_MODULE_EXPORT void asymmetric_step1_ok( GtkWidget* button, gpointer data
) {
+ GtkFileChooser* file;
+
+ file = GTK_FILE_CHOOSER( gtk_builder_get_object(
builder, "file_a1_select" ) );
+
+ // Make sure there's actually a file selected.
+ if ( gtk_file_chooser_get_filename( file ) == NULL ) {
+ g_free( file );
+ return;
+ }
+
+ // Make sure it's an SHACrypt file.
+ FILE* f;
+ char fbuf[5];
+
+ f = fopen( gtk_file_chooser_get_filename( file ), "rb" );
+ g_free( file );
+
+ if ( f == NULL || fread( fbuf, 1, 5, f ) != 5 )
+ strcpy( fbuf, "fail." ); // Make sure we have all 5 bytes set.
+
+ if ( f != NULL ) {
+ fclose( f );
+
+ g_free( f );
+ }
+
+ if ( strncmp( fbuf, identifier, 3 ) != 0 || fbuf[3] < '\1' || fbuf[3]
> '\2' || fbuf[4] != '\0' ) {
+ g_free( fbuf );
+
+ GtkWidget* invalid_file;
+
+ invalid_file = GTK_WIDGET( gtk_builder_get_object(
builder, "asymmetric_step1_error_notshacrypt" ) );
+
+ gtk_widget_show( invalid_file );
+
+ g_free( invalid_file );
+
+ return;
+ }
+
+ // Now on to the actual displaying part.
+ GtkWidget* step1;
+ GtkWidget* step2;
+
+ step1 = GTK_WIDGET( gtk_builder_get_object(
builder, "asymmetric_step1" ) );
+ step2 = GTK_WIDGET( gtk_builder_get_object(
builder, "asymmetric_step2" ) );
+
+ gtk_widget_show( step2 );
+ gtk_widget_hide( step1 );
+
+ g_free( step1 );
+ g_free( step2 );
+}
+
+/* Password scoring method adapted from
+ * http://www.geekwisdom.com/js/passwordmeter.js
+ */
+G_MODULE_EXPORT void asymmetric_step2_passchange( GtkEntry* button,
gpointer data ) {
+ GtkProgressBar* meter;
+
+ meter = GTK_PROGRESS_BAR( gtk_builder_get_object(
builder, "progressbar_a2_pass_strength" ) );
+
+ int len = gtk_entry_get_text_length( button );
+ const char* pass = gtk_entry_get_text( button );
+
+ if ( len == 0 ) {
+ gtk_progress_bar_set_fraction( meter, 0.0 );
+ gtk_progress_bar_set_text( meter, "Enter a password." );
+
+ g_free( meter );
+
+ return;
+ }
+
+ int score, i,
+ lower = 0,
+ upper = 0,
+ num = 0,
+ symb = 0;
+
+ // Total length
+ if ( len > 15 ) {
+ score = 18;
+ } else if ( len > 7 ) {
+ score = 12;
+ } else if ( len > 4 ) {
+ score = 6;
+ } else {
+ score = 3;
+ }
+
+ for ( i = 0; i < len; i++ ) {
+ if ( pass[i] >= 'a' && pass[i] <= 'z' )
+ lower++;
+ else if ( pass[i] >= 'A' && pass[i] <= 'Z' )
+ upper++;
+ else if ( pass[i] >= '0' && pass[i] <= '9' )
+ num++;
+ else
+ symb++;
+ }
+
+ // Letters
+ if ( lower || upper )
+ score += 1;
+ if ( lower && upper )
+ score += 2;
+ if ( lower + upper > 1 )
+ score += 2;
+ if ( lower > 1 && upper > 1 )
+ score += 2;
+
+ // Numbers
+ if ( num == 1 )
+ score += 5;
+ if ( num > 1 )
+ score += 7;
+
+ // Symbols
+ if ( symb == 1 )
+ score += 5;
+ if ( symb > 1 )
+ score += 7;
+
+ // Combinations
+ if ( ( upper || lower ) && num )
+ score++;
+ if ( upper && lower )
+ score++;
+ if ( ( upper || lower ) && num && symb )
+ score += 2;
+ if ( upper && lower && num && symb )
+ score += 2;
+
+ gtk_progress_bar_set_fraction( meter, score / 45.0 );
+ if ( score == 45 )
+ gtk_progress_bar_set_text( meter, "Excellent" );
+ else if ( score > 39 )
+ gtk_progress_bar_set_text( meter, "Secure" );
+ else if ( score > 24 )
+ gtk_progress_bar_set_text( meter, "Good" );
+ else if ( score > 9 )
+ gtk_progress_bar_set_text( meter, "Ok" );
+ else
+ gtk_progress_bar_set_text( meter, "Bad" );
+
+ g_free( meter );
+}
+
+G_MODULE_EXPORT void asymmetric_step3() {
+ GtkWindow* step3;
+ GtkEntry* pass;
+ GtkFileChooser* file;
+ GtkProgressBar* progress;
+
+ step3 = GTK_WINDOW( gtk_builder_get_object(
builder, "asymmetric_step3" ) );
+ pass = GTK_ENTRY( gtk_builder_get_object(
builder, "field_a2_password1" ) );
+ file = GTK_FILE_CHOOSER( gtk_builder_get_object(
builder, "file_a1_select" ) );
+ progress = GTK_PROGRESS_BAR( gtk_builder_get_object(
builder, "progressbar_a3_progress" ) );
+
+ gtk_progress_bar_set_text( progress, NULL );
+ gtk_window_set_deletable( step3, FALSE );
+
+ FILE* f;
+ FILE* o;
+ unsigned long i, size, n;
+ SHACrypt_Context s;
+ unsigned char algos = '\0',
+ randlen = '\0';
+ static char fbuf[256] = {0},
+ obuf[256] = {0};
+ char* filename = gtk_file_chooser_get_filename( file );
+ char* tmp;
+
+ g_free( file );
+
+ f = fopen( filename, "rb" );
+
+ filename = g_strndup( filename, strlen( filename ) - 9 );
+
+ tmp = g_strdup_printf( "%s_1.shacrypt", filename );
+
+ i = 1;
+ while ( fopen( tmp, "rb" ) != NULL ) {
+ g_free( tmp );
+ i++;
+ tmp = g_strdup_printf( "%s_%lu.shacrypt", filename, i );
+ }
+
+ o = fopen( tmp, "wb" );
+
+ g_free( tmp );
+ g_free( filename );
+
+ fread( fbuf, 1, 5, f );
+
+ if ( fbuf[3] == '\1' ) {
+ randlen = '\x13';
+ fread( fbuf, 1, 20, f );
+ algos = '\x01';
+ }
+ if ( fbuf[3] == '\2' ) {
+ randlen = fgetc( f );
+ fread( fbuf, 1, (int)randlen + 1, f );
+ algos = fgetc( f );
+ }
+
+ fwrite( identifier, 1, 3, o );
+ fwrite( "\2\0", 1, 2, o );
+ fputc( randlen, o );
+ fwrite( fbuf, 1, (int)randlen + 1, o );
+ fputc( algos, o );
+
+ SHACrypt_Init( &s, g_strdup( gtk_entry_get_text( pass ) ),
gtk_entry_get_text_length( pass ), algos, fbuf, (int)randlen + 1 );
+
+ gtk_entry_set_text( pass, "" );
+
+ g_free( pass );
+
+ i = ftell( f );
+ fseek( f, 0, SEEK_END );
+ size = ftell( f ) - i;
+ fseek( f, i, SEEK_SET );
+
+ i = 0;
+ /* Do the actual encryption */
+ while ( ( n = fread( fbuf, 1, 256, f ) ) > 0 ) {
+ i += n;
+
+ gtk_progress_bar_set_fraction( progress, (double)i / size );
+
+ SHACrypt_Process( &s, fbuf, obuf, n );
+
+ fwrite( obuf, 1, n, o );
+ }
+
+ fclose( f );
+ fclose( o );
+
+ g_free( f );
+ g_free( o );
+ g_free( fbuf );
+ g_free( obuf );
***The diff for this file has been truncated for email.***
=======================================
--- /dev/null
+++ /src/shacrypt-gui.rc Sat Feb 27 09:31:24 2010
@@ -0,0 +1,21 @@
+1 ICON "padlock.ico"
+1 VERSIONINFO
+FILEVERSION 1,2,1,0
+PRODUCTVERSION 1,2,1,0
+FILEOS 0x00040004L
+FILETYPE 0x00000001L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "04090000"
+ BEGIN
+ VALUE "FileVersion", "1.2.1\0"
+ VALUE "CompanyName", "LlamaSlayers\0"
+ VALUE "InternalName", "shacrypt\0"
+ VALUE "LegalCopyright", "Copyright 2009 LlamaSlayers\0"
+ VALUE "FileDescription", "SHA1 enCRYPTion program\0"
+ VALUE "ProductName", "SHACrypt\0"
+ VALUE "ProductVersion", "1.2.1\0"
+ END
+ END
+END
=======================================
--- /dev/null
+++ /src/shacrypt-icon.h Sat Feb 27 09:31:24 2010
@@ -0,0 +1,5411 @@
+/* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */
+
+/**
+ * This file was generated from a rasterized version of padlock.svg
+ * with the gdk-pixbuf-csource command line application that ships
+ * with GTK+.
+ */
+
+static const GdkPixdata shacrypt_icon = {
+ 0x47646b50, /* Pixbuf magic: 'GdkP' */
+ 24 + 119146, /* header length + pixel_data length */
+ 0x2010002, /* pixdata_type */
+ 1024, /* rowstride */
+ 256, /* width */
+ 256, /* height */
+ /* pixel_data: */
+ "\357\377\377\377\0\40\226\230\224\26\225\227\223:\224\226\222P\223\225"
+ "\221e\222\224\220z\220\222\216\217\217\221\215\244\216\220\214\271\215"
+ "\217\213\316\214\216\212\331\212\214\210\336\211\213\207\343\210\212"
+ "\206\351\207\211\205\356\206\210\204\363\204\206\202\370\203\205\201"
+ "\375\202\204\200\365\201\203\177\343\200\202~\322~\200|\301}\177{\260"
+ "|~z\237{}y\216z|x}xzvlwyu[vxtJuws:tvr)rtp\30qso\7\377\377\377\377\0\332"
+ "\377\377\377\0.\235\237\233\4\234\236\232,\233\235\231S\232\234\230z"
+ "\231\233\227\241\227\231\225\310\226\230\224\357\225\227\223\377\224"
+ "\226\222\377\223\225\221\377\221\223\217\377\220\222\216\377\217\221"
+ "\215\377\216\220\214\377\215\217\213\377\213\215\211\377\212\214\210"
+ "\377\211\213\207\377\210\212\206\377\207\211\205\377\205\207\203\377"
+ "\204\206\202\377\203\205\201\377\202\204\200\377\201\203\177\377\177"
+ "\201}\377~\200|\377}\177{\377|~z\377{}y\377y{w\377xzv\377wyu\377vxt\377"
+ "uws\377suq\377rtp\377qso\377prn\377oqm\366oqm\330oqm\257oqm\206oqm]o"
+ "qm4oqm\14\377\377\377\377\0\317\377\377\377\0*\235\237\233\14\235\237"
+ "\233D\235\237\233\200\235\237\233\274\234\236\232\364\233\235\231\377"
+ "\232\234\230\377\230\232\226\377\227\231\225\377\226\230\224\377\225"
+ "\227\223\377\224\226\222\377\222\224\220\377\221\223\217\377\220\222"
+ "\216\377\217\221\215\377\216\220\214\377\214\216\212\377\213\215\211"
+ "\377\212\214\210\377\211\213\207\377\210\212\206\377\206\210\204\377"
+ "\205\207\203\377\204\206\202\377\203\205\201\377\202\204\200\377\200"
+ "\202~\377\177\201}\377~\200|\377}\177{\377|~z\377z|x\377y{w\377xzv\377"
+ "wyu\377vxt\377tvr\377suq\377rtp\377qso\377prn\377\210oqm\377\5oqm\342"
+ "oqm\262oqmtoqm7oqm\5\377\377\377\377\0\306\377\377\377\0\5\235\237\233"
+ "\7\235\237\233L\235\237\233\217\235\237\233\314\235\237\233\374\202\235"
+ "\237\233\377%\234\236\232\377\233\235\231\377\231\233\227\377\230\232"
+ "\226\377\227\231\225\377\226\230\224\377\225\227\223\377\223\225\221"
+ "\377\222\224\220\377\221\223\217\377\220\222\216\377\217\221\215\377"
+ "\215\217\213\377\214\216\212\377\213\215\211\377\212\214\210\377\211"
+ "\213\207\377\207\211\205\377\206\210\204\377\205\207\203\377\204\206"
+ "\202\377\203\205\201\377\201\203\177\377\200\202~\377\177\201}\377~\200"
+ "|\377}\177{\377{}y\377z|x\377y{w\377xzv\377wyu\377uws\377tvr\377suq\377"
+ "rtp\377qso\377\216oqm\377\5oqm\365oqm\275oqm\200oqmCoqm\14\377\377\377"
+ "\377\0\277\377\377\377\0\4\235\237\233\13\235\237\233T\235\237\233\246"
+ "\235\237\233\361\205\235\237\233\377%\234\236\232\377\232\234\230\377"
+ "\231\233\227\377\230\232\226\377\227\231\225\377\226\230\224\377\224"
+ "\226\222\377\223\225\221\377\222\224\220\377\221\223\217\377\220\222"
+ "\216\377\216\220\214\377\215\217\213\377\214\216\212\377\213\215\211"
+ "\377\212\214\210\377\210\212\206\377\207\211\205\377\206\210\204\377"
+ "\205\207\203\377\204\206\202\377\202\204\200\377\201\203\177\377\200"
+ "\202~\377\177\201}\377~\200|\377|~z\377{}y\377z|x\377y{w\377xzv\377v"
+ "xt\377uws\377tvr\377suq\377rtp\377prn\377\223oqm\377\4oqm\372oqm\266"
+ "oqmboqm\22\377\377\377\377\0\271\377\377\377\0\4\235\237\233\10\235\237"
+ "\233[\235\237\233\257\235\237\233\366\206\235\237\233\377&\234\236\232"
+ "\377\233\235\231\377\232\234\230\377\231\233\227\377\230\232\226\377"
+ "\227\231\225\377\225\227\223\377\224\226\222\377\223\225\221\377\222"
+ "\224\220\377\220\222\216\377\217\221\215\377\216\220\214\377\215\217"
+ "\213\377\217\221\215\377\226\230\224\377\234\236\232\377\243\245\241"
+ "\377\253\255\251\377\263\265\261\377\266\270\264\377\267\271\266\377"
+ "\271\273\267\377\273\275\271\377\275\277\273\377\277\301\275\377\300"
+ "\302\277\377\302\305\301\377\300\302\277\377\271\273\270\377\261\263"
+ "\260\377\251\253\247\377\240\242\236\377\230\232\226\377\217\221\215"
+ "\377\207\211\205\377}\177{\377tvr\377\227oqm\377\4oqm\373oqm\272oqmf"
+ "oqm\25\377\377\377\377\0\264\377\377\377\0\3\235\237\233\32\235\237\233"
+ "\204\235\237\233\352\210\235\237\233\377\23\234\236\232\377\233\235\231"
+ "\377\232\234\230\377\231\233\227\377\227\231\225\377\226\230\224\377"
+ "\225\227\223\377\224\226\222\377\231\233\227\377\243\245\241\377\257"
+ "\261\255\377\273\276\271\377\307\312\306\377\325\327\323\377\337\342"
+ "\335\377\343\346\342\377\344\347\342\377\344\347\343\377\345\347\343"
+ "\377\202\345\350\344\377\7\346\350\345\377\346\351\345\377\347\351\345"
+ "\377\347\351\346\377\350\352\346\377\350\352\347\377\350\353\347\377"
+ "\204\351\353\350\377\20\350\353\347\377\350\352\347\377\347\352\346\377"
+ "\347\351\346\377\347\351\345\377\346\350\345\377\346\350\344\377\342"
+ "\345\341\377\332\334\330\377\322\324\320\377\312\314\310\377\301\304"
+ "\300\377\267\271\265\377\244\247\242\377\221\224\217\377~\200|\377\221"
+ "oqm\377\3oqm\374oqm\257oqmA\377\377\377\377\0\260\377\377\377\0\3\235"
+ "\237\2339\235\237\233\247\235\237\233\372\211\235\237\233\377\13\234"
+ "\236\232\377\233\235\231\377\232\234\230\377\230\232\226\377\233\235"
+ "\231\377\252\255\250\377\273\276\271\377\315\317\313\377\333\336\331"
+ "\377\341\344\337\377\341\344\340\377\202\342\345\340\377\6\343\345\341"
+ "\377\343\346\341\377\343\346\342\377\344\347\342\377\344\347\343\377"
+ "\345\347\343\377\202\345\350\344\377\5\346\350\345\377\346\351\345\377"
+ "\347\351\345\377\347\351\346\377\347\352\346\377\202\350\352\347\377"
+ "\204\351\353\350\377\27\350\353\347\377\350\352\347\377\350\352\346\377"
+ "\347\351\346\377\347\351\345\377\346\351\345\377\346\350\344\377\345"
+ "\350\344\377\345\347\343\377\344\347\343\377\344\346\342\377\343\346"
+ "\342\377\343\346\341\377\342\345\341\377\342\345\340\377\341\344\340"
+ "\377\341\344\337\377\334\337\332\377\311\314\307\377\267\271\264\377"
+ "\242\245\240\377\210\213\206\377rtp\377\216oqm\377\3oqm\324oqmgoqm\13"
+ "\377\377\377\377\0\253\377\377\377\0\2\235\237\233I\235\237\233\312\213"
+ "\235\237\233\377\6\234\236\232\377\237\241\235\377\260\262\256\377\300"
+ "\303\276\377\321\324\317\377\336\342\334\377\202\340\343\336\377\3\340"
+ "\344\337\377\341\344\337\377\341\344\340\377\202\342\345\340\377\6\343"
+ "\345\341\377\343\346\341\377\343\346\342\377\344\346\342\377\344\347"
+ "\343\377\345\347\343\377\202\345\350\344\377\5\346\350\344\377\346\351"
+ "\345\377\347\351\345\377\347\351\346\377\347\352\346\377\202\350\352"
+ "\347\377\202\351\353\350\377\22\352\354\351\377\351\353\350\377\351\353"
+ "\347\377\350\352\347\377\350\352\346\377\347\351\346\377\347\351\345"
+ "\377\346\351\345\377\346\350\344\377\345\350\344\377\345\347\343\377"
+ "\344\347\343\377\344\346\342\377\343\346\342\377\343\346\341\377\342"
+ "\345\341\377\342\345\340\377\341\344\340\377\202\341\344\337\377\202"
+ "\340\343\336\377\10\337\342\335\377\337\342\334\377\336\341\334\377\332"
+ "\335\327\377\301\305\277\377\247\252\245\377\214\217\212\377tvr\377\214"
+ "oqm\377\3oqm\357oqm\215oqm\33\377\377\377\377\0\247\377\377\377\0\2\235"
+ "\237\233-\235\237\233\271\213\235\237\233\377\7\242\244\240\377\265\270"
+ "\263\377\312\315\310\377\334\337\332\377\336\342\334\377\337\342\335"
+ "\377\337\343\335\377\202\340\343\336\377\1\340\344\337\377\202\341\344"
+ "\337\377\202\342\345\340\377\5\342\345\341\377\343\346\341\377\343\346"
+ "\342\377\344\346\342\377\344\347\343\377\202\345\347\343\377\6\345\350"
+ "\344\377\346\350\344\377\346\351\345\377\347\351\345\377\347\351\346"
+ "\377\347\352\346\377\202\350\352\347\377\205\351\353\350\377\17\350\352"
+ "\347\377\350\352\346\377\347\351\346\377\347\351\345\377\346\351\345"
+ "\377\346\350\344\377\345\350\344\377\345\347\343\377\344\347\343\377"
+ "\344\346\342\377\343\346\342\377\343\346\341\377\342\345\341\377\342"
+ "\345\340\377\342\344\340\377\202\341\344\337\377\202\340\343\336\377"
+ "\14\337\342\335\377\337\342\334\377\336\341\334\377\336\341\333\377\335"
+ "\341\333\377\335\340\332\377\334\340\332\377\334\337\331\377\331\335"
+ "\327\377\277\302\275\377\234\237\232\377y|w\377\213oqm\377\3oqm\365o"
+ "qm\203oqm\15\377\377\377\377\0\243\377\377\377\0\3\235\237\233\30\235"
+ "\237\233\233\235\237\233\375\211\235\237\233\377\7\240\242\236\377\267"
+ "\272\265\377\315\317\313\377\334\340\332\377\336\341\333\377\336\341"
+ "\334\377\336\342\334\377\202\337\342\335\377\203\340\343\336\377\202"
+ "\341\344\337\377\202\342\345\340\377\4\342\345\341\377\343\346\341\377"
+ "\343\346\342\377\344\346\342\377\202\344\347\343\377\7\345\347\343\377"
+ "\345\350\344\377\346\350\344\377\346\351\345\377\347\351\345\377\347"
+ "\351\346\377\347\352\346\377\202\350\352\347\377\1\351\353\347\377\204"
+ "\351\353\350\377\202\350\352\347\377\15\347\352\346\377\347\351\345\377"
+ "\346\351\345\377\346\350\344\377\345\350\344\377\345\347\343\377\344"
+ "\347\343\377\344\347\342\377\344\346\342\377\343\346\341\377\343\345"
+ "\341\377\342\345\340\377\342\344\340\377\202\341\344\337\377\202\340"
+ "\343\336\377\202\337\342\335\377\16\336\342\334\377\336\341\334\377\335"
+ "\341\333\377\335\340\332\377\334\340\332\377\334\337\331\377\333\337"
+ "\331\377\333\337\330\377\332\336\330\377\332\336\327\377\332\335\327"
+ "\377\300\304\276\377\236\240\234\377|~z\377\212oqm\377\3oqm\351oqmio"
+ "qm\4\377\377\377\377\0\237\377\377\377\0\3\235\237\233\3\235\237\233"
+ "w\235\237\233\363\211\235\237\233\377\4\246\250\244\377\300\303\276\377"
+ "\331\334\327\377\335\340\332\377\202\335\341\333\377\4\336\341\334\377"
+ "\336\342\334\377\341\344\337\377\337\342\335\377\203\340\343\336\377"
+ "\202\341\344\337\377\202\342\345\340\377\15\342\345\341\377\343\346\341"
+ "\377\343\346\342\377\344\346\342\377\344\347\342\377\344\347\343\377"
+ "\345\347\343\377\345\350\344\377\346\350\344\377\346\350\345\377\346"
+ "\351\345\377\347\351\346\377\347\352\346\377\202\350\352\347\377\1\350"
+ "\353\347\377\204\351\353\350\377\202\350\352\347\377\5\347\352\346\377"
+ "\347\351\346\377\346\351\345\377\346\350\344\377\345\350\344\377\202"
+ "\345\347\343\377\6\344\347\342\377\344\346\342\377\343\346\341\377\343"
+ "\345\341\377\342\345\340\377\342\344\340\377\202\341\344\337\377\202"
+ "\340\343\336\377\202\337\342\335\377\15\336\342\334\377\336\341\334\377"
+ "\335\341\333\377\335\340\333\377\334\340\332\377\334\337\332\377\333"
+ "\337\331\377\333\337\330\377\333\336\330\377\332\336\327\377\332\335"
+ "\327\377\331\335\326\377\331\334\326\377\202\330\334\325\377\3\277\302"
+ "\274\377\222\225\220\377qso\377\211oqm\377\2oqm\327oqmN\377\377\377\377"
+ "\0\235\377\377\377\0\2\235\237\233\36\235\237\233\302\211\235\237\233"
+ "\377\5\256\261\254\377\311\314\307\377\334\337\331\377\334\340\332\377"
+ "\335\340\332\377\202\335\341\333\377\5\342\345\340\377\354\357\353\377"
+ "\366\367\366\377\366\367\365\377\340\344\337\377\202\340\343\336\377"
+ "\202\341\344\337\377\17\341\344\340\377\342\345\340\377\342\345\341\377"
+ "\343\346\341\377\343\346\342\377\344\346\342\377\344\347\342\377\344"
+ "\347\343\377\345\347\343\377\345\350\344\377\346\350\344\377\346\350"
+ "\345\377\346\351\345\377\347\351\346\377\347\352\346\377\202\350\352"
+ "\347\377\1\350\353\347\377\204\351\353\350\377\202\350\352\347\377\4"
+ "\347\352\346\377\347\351\346\377\346\351\345\377\346\350\345\377\202"
+ "\345\350\344\377\5\345\347\343\377\344\347\342\377\344\346\342\377\343"
+ "\346\341\377\343\345\341\377\202\342\345\340\377\202\341\344\337\377"
+ "\202\340\343\336\377\202\337\342\335\377\4\336\342\334\377\336\341\334"
+ "\377\335\341\333\377\335\340\333\377\202\334\340\332\377\5\334\337\331"
+ "\377\333\337\330\377\333\336\330\377\332\336\327\377\332\335\327\377"
+ "\202\331\335\326\377\202\330\334\325\377\202\327\333\324\377\4\326\332"
+ "\323\377\313\316\310\377\237\243\235\377wyu\377\211oqm\377\2oqm\250o"
+ "qm\20\377\377\377\377\0\232\377\377\377\0\2\235\237\233V\235\237\233"
+ "\357\210\235\237\233\377\12\257\262\255\377\321\324\317\377\333\337\331"
+ "\377\334\337\331\377\334\340\332\377\335\340\332\377\337\343\335\377"
+ "\351\354\350\377\364\365\364\377\372\373\372\377\202\372\372\372\377"
+ "\3\372\372\371\377\354\355\352\377\340\343\336\377\202\341\344\337\377"
+ "\4\341\344\340\377\342\345\340\377\342\345\341\377\343\346\341\377\202"
+ "\343\346\342\377\7\344\347\342\377\344\347\343\377\345\347\343\377\345"
+ "\350\344\377\346\350\344\377\346\350\345\377\346\351\345\377\202\347"
+ "\351\346\377\3\350\352\346\377\350\352\347\377\350\353\347\377\204\351"
+ "\353\350\377\202\350\352\347\377\13\347\352\346\377\347\351\346\377\346"
+ "\351\345\377\346\350\345\377\346\350\344\377\345\350\344\377\345\347"
+ "\343\377\344\347\343\377\344\346\342\377\343\346\341\377\343\345\341"
+ "\377\202\342\345\340\377\202\341\344\337\377\202\340\343\336\377\202"
+ "\337\342\335\377\13\336\342\334\377\336\341\334\377\336\341\333\377\335"
+ "\340\333\377\335\340\332\377\334\340\332\377\334\337\331\377\333\337"
+ "\331\377\333\336\330\377\332\336\330\377\332\335\327\377\202\331\335"
+ "\326\377\202\330\334\325\377\202\327\333\324\377\202\326\332\323\377"
+ "\5\325\332\322\377\325\331\322\377\322\326\316\377\254\260\252\377|~"
+ "y\377\210oqm\377\2oqm\342oqmA\377\377\377\377\0\227\377\377\377\0\2\235"
+ "\237\233\13\235\237\233\236\210\235\237\233\377\12\250\253\246\377\312"
+ "\315\310\377\333\337\330\377\333\337\331\377\334\337\331\377\335\341"
+ "\333\377\346\351\345\377\362\363\361\377\372\373\372\377\373\373\372"
+ "\377\203\372\373\372\377\3\372\372\372\377\372\372\371\377\361\362\360"
+ "\377\202\341\344\337\377\3\341\344\340\377\342\345\340\377\342\345\341"
+ "\377\202\343\346\341\377\4\343\346\342\377\344\347\342\377\344\347\343"
+ "\377\345\347\343\377\202\345\350\344\377\7\346\350\345\377\346\351\345"
+ "\377\347\351\345\377\347\351\346\377\350\352\346\377\350\352\347\377"
+ "\350\353\347\377\204\351\353\350\377\15\350\353\347\377\350\352\347\377"
+ "\347\352\346\377\347\351\346\377\347\351\345\377\346\350\345\377\346"
+ "\350\344\377\345\350\344\377\345\347\343\377\344\347\343\377\344\346"
+ "\342\377\343\346\342\377\343\346\341\377\202\342\345\340\377\202\341"
+ "\344\337\377\202\340\343\336\377\21\337\343\335\377\337\342\335\377\337"
+ "\342\334\377\336\341\334\377\336\341\333\377\335\340\333\377\335\340"
+ "\332\377\334\340\332\377\334\337\331\377\333\337\331\377\333\336\330"
+ "\377\332\336\330\377\332\335\327\377\331\335\327\377\331\335\326\377"
+ "\330\334\326\377\330\334\325\377\202\327\333\324\377\12\326\333\323\377"
+ "\326\332\323\377\326\332\322\377\325\331\322\377\325\331\321\377\324"
+ "\330\321\377\324\330\320\377\320\325\315\377\246\251\243\377vxt\377\207"
+ "oqm\377\3oqm\376oqm\213oqm\6\377\377\377\377\0\224\377\377\377\0\2\235"
+ "\237\233#\235\237\233\332\207\235\237\233\377\10\243\245\241\377\303"
+ "\306\301\377\332\336\330\377\333\337\330\377\333\337\331\377\337\342"
+ "\334\377\356\360\356\377\371\372\371\377\202\373\374\373\377\2\373\373"
+ "\373\377\373\373\372\377\203\372\373\372\377\5\372\372\372\377\372\372"
+ "\371\377\357\360\356\377\341\344\337\377\341\344\340\377\202\342\345"
+ "\340\377\6\343\345\341\377\343\346\341\377\343\346\342\377\344\347\342"
+ "\377\344\347\343\377\345\347\343\377\202\345\350\344\377\5\346\350\345"
+ "\377\346\351\345\377\347\351\345\377\347\351\346\377\347\352\346\377"
+ "\202\350\352\347\377\204\351\353\350\377\21\350\353\347\377\350\352\347"
+ "\377\350\352\346\377\347\351\346\377\347\351\345\377\346\350\345\377"
+ "\346\350\344\377\345\350\344\377\345\347\343\377\344\347\343\377\344"
+ "\346\342\377\343\346\342\377\343\346\341\377\342\345\341\377\342\345"
+ "\340\377\341\344\340\377\341\344\337\377\202\340\343\336\377\21\340\343"
+ "\335\377\337\342\335\377\337\342\334\377\336\341\334\377\336\341\333"
+ "\377\335\340\333\377\335\340\332\377\334\340\332\377\334\337\331\377"
+ "\333\337\331\377\333\336\330\377\332\336\330\377\332\336\327\377\331"
+ "\335\327\377\331\335\326\377\330\334\326\377\330\334\325\377\202\327"
+ "\333\324\377\15\326\333\323\377\326\332\323\377\326\332\322\377\325\331"
+ "\322\377\325\331\321\377\324\330\321\377\324\330\320\377\323\330\320"
+ "\377\323\327\317\377\322\327\317\377\314\320\310\377\234\237\231\377"
+ "rtp\377\207oqm\377\2oqm\320oqm!\377\377\377\377\0\222\377\377\377\0\2"
+ "\235\237\2333\235\237\233\351\207\235\237\233\377\11\264\267\262\377"
+ "\327\333\325\377\332\336\330\377\333\337\330\377\334\337\332\377\352"
+ "\354\350\377\372\373\372\377\374\374\374\377\374\374\373\377\202\373"
+ "\374\373\377\1\373\373\373\377\202\373\373\372\377\202\372\373\372\377"
+ "\4\372\372\372\377\371\372\371\377\345\350\343\377\341\344\340\377\202"
+ "\342\345\340\377\6\343\345\341\377\343\346\341\377\343\346\342\377\344"
+ "\347\342\377\344\347\343\377\345\347\343\377\202\345\350\344\377\5\346"
+ "\350\344\377\346\351\345\377\347\351\345\377\347\351\346\377\347\352"
+ "\346\377\202\350\352\347\377\202\351\353\350\377\22\352\354\351\377\351"
+ "\353\350\377\351\353\347\377\350\352\347\377\350\352\346\377\347\351"
+ "\346\377\347\351\345\377\346\351\345\377\346\350\344\377\345\350\344"
+ "\377\345\347\343\377\344\347\343\377\344\346\342\377\343\346\342\377"
+ "\343\346\341\377\342\345\341\377\342\345\340\377\341\344\340\377\202"
+ "\341\344\337\377\23\340\343\336\377\340\343\335\377\337\342\335\377\337"
+ "\342\334\377\336\341\334\377\336\341\333\377\335\341\333\377\335\340"
+ "\332\377\334\340\332\377\334\337\331\377\333\337\331\377\333\336\330"
+ "\377\332\336\330\377\332\336\327\377\331\335\327\377\331\335\326\377"
+ "\330\334\326\377\330\334\325\377\330\333\325\377\202\327\333\324\377"
+ "\16\326\332\323\377\326\332\322\377\325\331\322\377\325\331\321\377\324"
+ "\330\321\377\324\330\320\377\323\330\320\377\323\327\317\377\322\327"
+ "\317\377\322\326\316\377\321\326\316\377\321\326\315\377\304\311\301"
+ "\377\213\216\210\377\207oqm\377\2oqm\347oqm0\377\377\377\377\0\220\377"
+ "\377\377\0\2\235\237\233D\235\237\233\363\206\235\237\233\377\10\241"
+ "\243\237\377\305\310\303\377\332\336\327\377\332\336\330\377\333\337"
+ "\330\377\344\347\342\377\367\370\367\377\374\375\374\377\202\374\374"
+ "\374\377\202\374\374\373\377\1\373\374\373\377\202\373\373\373\377\202"
+ "\373\373\372\377\202\372\373\372\377\2\352\354\351\377\341\344\340\377"
+ "\202\342\345\340\377\5\342\345\341\377\343\346\341\377\343\346\342\377"
+ "\344\346\342\377\344\347\343\377\202\345\347\343\377\6\345\350\344\377"
+ "\346\350\344\377\346\351\345\377\347\351\345\377\347\351\346\377\347"
+ "\352\346\377\202\350\352\347\377\205\351\353\350\377\17\350\352\347\377"
+ "\350\352\346\377\347\351\346\377\347\351\345\377\346\351\345\377\346"
+ "\350\344\377\345\350\344\377\345\347\343\377\344\347\343\377\344\346"
+ "\342\377\343\346\342\377\343\346\341\377\342\345\341\377\342\345\340"
+ "\377\341\344\340\377\202\341\344\337\377\202\340\343\336\377\17\337\342"
+ "\335\377\337\342\334\377\336\341\334\377\336\341\333\377\335\341\333"
+ "\377\335\340\332\377\334\340\332\377\334\337\331\377\333\337\331\377"
+ "\333\336\330\377\332\336\330\377\332\336\327\377\331\335\327\377\331"
+ "\335\326\377\331\334\326\377\202\330\334\325\377\202\327\333\324\377"
+ "\202\326\332\323\377\202\325\331\322\377\15\324\331\321\377\324\330\320"
+ "\377\323\330\320\377\323\327\317\377\322\327\317\377\322\326\316\377"
+ "\321\326\316\377\321\326\315\377\320\325\315\377\320\325\314\377\320"
+ "\324\314\377\246\252\243\377rtp\377\206oqm\377\2oqm\361oqmB\377\377\377"
+ "\377\0\216\377\377\377\0\2\235\237\233Y\235\237\233\372\206\235\237\233"
+ "\377\6\252\255\250\377\321\325\317\377\332\336\327\377\332\336\330\377"
+ "\337\343\334\377\362\364\361\377\202\375\375\375\377\3\375\375\374\377"
+ "\374\375\374\377\374\374\374\377\202\374\374\373\377\1\373\374\373\377"
+ "\202\373\373\373\377\202\373\373\372\377\3\371\372\371\377\351\354\350"
+ "\377\341\344\337\377\202\342\345\340\377\4\342\345\341\377\343\346\341"
+ "\377\343\346\342\377\344\346\342\377\202\344\347\343\377\7\345\347\343"
+ "\377\345\350\344\377\346\350\344\377\346\351\345\377\347\351\345\377"
+ "\347\351\346\377\347\352\346\377\202\350\352\347\377\1\351\353\347\377"
+ "\204\351\353\350\377\17\350\352\347\377\350\352\346\377\347\352\346\377"
+ "\347\351\345\377\346\351\345\377\346\350\344\377\345\350\344\377\345"
+ "\347\343\377\344\347\343\377\344\347\342\377\343\346\342\377\343\346"
+ "\341\377\342\345\341\377\342\345\340\377\342\344\340\377\202\341\344"
+ "\337\377\202\340\343\336\377\202\337\342\335\377\202\336\341\334\377"
+ "\13\335\341\333\377\335\340\332\377\334\340\332\377\334\337\331\377\333"
+ "\337\331\377\333\337\330\377\332\336\330\377\332\336\327\377\332\335"
+ "\327\377\331\335\326\377\331\334\326\377\202\330\334\325\377\202\327"
+ "\333\324\377\202\326\332\323\377\202\325\331\322\377\5\324\331\321\377"
+ "\324\330\321\377\323\330\320\377\323\327\317\377\322\327\317\377\202"
+ "\322\326\316\377\4\321\326\315\377\321\325\315\377\320\325\314\377\320"
+ "\324\314\377\202\317\324\313\377\2\276\302\272\377\200\203~\377\206o"
+ "qm\377\2oqm\371oqmV\377\377\377\377\0\214\377\377\377\0\2\235\237\233"
+ "l\235\237\233\376\206\235\237\233\377\6\271\274\267\377\330\334\326\377"
+ "\332\336\327\377\333\337\331\377\354\356\353\377\374\375\374\377\203"
+ "\375\375\375\377\202\374\375\374\377\202\374\374\374\377\2\374\374\373"
+ "\377\373\374\373\377\202\373\373\373\377\4\373\373\372\377\366\366\365"
+ "\377\345\347\343\377\341\344\337\377\202\342\345\340\377\4\342\345\341"
+ "\377\343\346\341\377\343\346\342\377\344\346\342\377\202\344\347\343"
+ "\377\7\345\347\343\377\345\350\344\377\346\350\344\377\346\350\345\377"
+ "\346\351\345\377\347\351\346\377\347\352\346\377\202\350\352\347\377"
+ "\1\351\353\347\377\204\351\353\350\377\202\350\352\347\377\15\347\352"
+ "\346\377\347\351\346\377\346\351\345\377\346\350\344\377\345\350\344"
+ "\377\345\347\343\377\344\347\343\377\344\347\342\377\344\346\342\377"
+ "\343\346\341\377\343\345\341\377\342\345\340\377\342\344\340\377\202"
+ "\341\344\337\377\202\340\343\336\377\202\337\342\335\377\15\336\342\334"
+ "\377\336\341\334\377\335\341\333\377\335\340\333\377\334\340\332\377"
+ "\334\337\332\377\333\337\331\377\333\337\330\377\333\336\330\377\332"
+ "\336\327\377\332\335\327\377\331\335\326\377\331\334\326\377\202\330"
+ "\334\325\377\202\327\333\324\377\202\326\332\323\377\15\325\332\322\377"
+ "\325\331\322\377\324\331\321\377\324\330\321\377\323\330\320\377\323"
+ "\327\320\377\323\327\317\377\322\327\316\377\322\326\316\377\321\326"
+ "\315\377\321\325\315\377\320\325\314\377\320\324\314\377\202\317\324"
+ "\313\377\202\316\323\312\377\2\312\317\306\377\227\232\224\377\206oq"
+ "m\377\2oqm\375oqmn\377\377\377\377\0\212\377\377\377\0\2\235\237\233"
+ "W\235\237\233\376\205\235\237\233\377\10\236\240\234\377\302\305\277"
+ "\377\331\335\327\377\332\336\327\377\337\342\335\377\371\371\370\377"
+ "\376\376\376\377\375\376\375\377\203\375\375\375\377\202\374\375\374"
+ "\377\202\374\374\374\377\1\374\374\373\377\202\373\374\373\377\4\373"
+ "\373\373\377\360\361\357\377\342\345\340\377\341\344\337\377\202\342"
+ "\345\340\377\15\342\345\341\377\343\346\341\377\343\346\342\377\344\346"
+ "\342\377\344\347\342\377\344\347\343\377\345\347\343\377\345\350\344"
+ "\377\346\350\344\377\346\350\345\377\346\351\345\377\347\351\346\377"
+ "\347\352\346\377\202\350\352\347\377\1\350\353\347\377\204\351\353\350"
+ "\377\202\350\352\347\377\4\347\352\346\377\347\351\346\377\346\351\345"
+ "\377\346\350\345\377\202\345\350\344\377\5\345\347\343\377\344\347\342"
+ "\377\344\346\342\377\343\346\341\377\343\345\341\377\202\342\345\340"
+ "\377\202\341\344\337\377\202\340\343\336\377\202\337\342\335\377\15\336"
+ "\342\334\377\336\341\334\377\335\341\333\377\335\340\333\377\334\340"
+ "\332\377\334\337\332\377\334\337\331\377\333\337\330\377\333\336\330"
+ "\377\332\336\327\377\332\335\327\377\331\335\326\377\331\334\326\377"
+ "\202\330\334\325\377\202\327\333\324\377\202\326\332\323\377\15\325\332"
+ "\322\377\325\331\322\377\324\331\321\377\324\330\321\377\324\330\320"
+ "\377\323\327\320\377\323\327\317\377\322\327\317\377\322\326\316\377"
+ "\321\326\316\377\321\325\315\377\320\325\314\377\320\324\314\377\202"
+ "\317\324\313\377\202\316\323\312\377\202\315\322\311\377\2\314\322\310"
+ "\377\242\246\237\377\207oqm\377\1oqmc\377\377\377\377\0\210\377\377\377"
+ "\0\2\235\237\233:\235\237\233\367\205\235\237\233\377\6\237\241\235\377"
+ "\307\312\304\377\331\335\327\377\332\336\327\377\341\344\337\377\373"
+ "\373\372\377\202\376\376\376\377\204\375\375\375\377\202\374\375\374"
+ "\377\202\374\374\374\377\4\374\374\373\377\373\374\373\377\371\372\371"
+ "\377\351\353\347\377\202\341\344\337\377\22\341\344\340\377\342\345\340"
+ "\377\342\345\341\377\343\346\341\377\343\346\342\377\344\346\342\377"
+ "\344\347\342\377\344\347\343\377\345\347\343\377\345\350\344\377\346"
+ "\350\344\377\346\350\345\377\346\351\345\377\347\351\346\377\347\352"
+ "\346\377\350\352\346\377\350\352\347\377\350\353\347\377\204\351\353"
+ "\350\377\202\350\352\347\377\13\347\352\346\377\347\351\346\377\346\351"
+ "\345\377\346\350\345\377\346\350\344\377\345\350\344\377\345\347\343"
+ "\377\344\347\342\377\344\346\342\377\343\346\341\377\343\345\341\377"
+ "\202\342\345\340\377\202\341\344\337\377\202\340\343\336\377\202\337"
+ "\342\335\377\13\336\342\334\377\336\341\334\377\336\341\333\377\335\340"
+ "\333\377\335\340\332\377\334\340\332\377\334\337\331\377\333\337\331"
+ "\377\333\336\330\377\332\336\330\377\332\335\327\377\202\331\335\326"
+ "\377\202\330\334\325\377\202\327\333\324\377\202\326\332\323\377\15\325"
+ "\332\322\377\325\331\322\377\324\331\321\377\324\330\321\377\324\330"
+ "\320\377\323\330\320\377\323\327\317\377\322\327\317\377\322\326\316"
+ "\377\321\326\316\377\321\325\315\377\320\325\315\377\320\325\314\377"
+ "\202\317\324\313\377\202\316\323\312\377\202\315\322\311\377\5\314\322"
+ "\310\377\314\321\310\377\314\321\307\377\253\256\247\377qso\377\205o"
+ "qm\377\2oqm\373oqmE\377\377\377\377\0\206\377\377\377\0\2\235\237\233"
+ "#\235\237\233\353\205\235\237\233\377\6\241\243\237\377\313\316\310\377"
+ "\331\335\327\377\332\336\327\377\343\346\341\377\374\374\374\377\202"
+ "\376\376\376\377\202\375\376\375\377\202\375\375\375\377\2\375\375\374"
+ "\377\374\375\374\377\203\374\374\374\377\3\373\374\373\377\364\365\363"
+ "\377\343\345\341\377\202\341\344\337\377\3\341\344\340\377\342\345\340"
+ "\377\342\345\341\377\202\343\346\341\377\15\343\346\342\377\344\347\342"
+ "\377\344\347\343\377\345\347\343\377\345\350\344\377\346\350\344\377"
+ "\346\350\345\377\346\351\345\377\347\351\345\377\347\351\346\377\350"
+ "\352\346\377\350\352\347\377\350\353\347\377\204\351\353\350\377\15\350"
+ "\353\347\377\350\352\347\377\347\352\346\377\347\351\346\377\347\351"
+ "\345\377\346\350\345\377\346\350\344\377\345\350\344\377\345\347\343"
+ "\377\344\347\343\377\344\346\342\377\343\346\342\377\343\345\341\377"
+ "\202\342\345\340\377\202\341\344\337\377\202\340\343\336\377\21\337\343"
+ "\335\377\337\342\335\377\337\342\334\377\336\341\334\377\336\341\333"
+ "\377\335\340\333\377\335\340\332\377\334\340\332\377\334\337\331\377"
+ "\333\337\331\377\333\336\330\377\332\336\330\377\332\335\327\377\331"
+ "\335\327\377\331\335\326\377\330\334\326\377\330\334\325\377\202\327"
+ "\333\324\377\202\326\332\323\377\17\325\332\322\377\325\331\322\377\325"
+ "\331\321\377\324\330\321\377\324\330\320\377\323\330\320\377\323\327"
+ "\317\377\322\327\317\377\322\326\316\377\321\326\316\377\321\325\315"
+ "\377\320\325\315\377\320\325\314\377\317\324\314\377\317\324\313\377"
+ "\202\316\323\312\377\202\315\322\311\377\7\315\322\310\377\314\321\310"
+ "\377\314\321\307\377\313\320\307\377\313\320\306\377\261\266\256\377"
+ "tvq\377\205oqm\377\2oqm\361oqm-\377\377\377\377\0\204\377\377\377\0\2"
+ "\235\237\233\22\235\237\233\331\205\235\237\233\377\6\240\242\236\377"
+ "\316\322\313\377\331\335\327\377\332\336\327\377\345\350\344\377\375"
+ "\375\374\377\202\376\376\376\377\202\375\376\375\377\203\375\375\375"
+ "\377\2\375\375\374\377\374\375\374\377\202\374\374\374\377\3\372\373"
+ "\372\377\353\355\352\377\340\343\336\377\202\341\344\337\377\1\341\344"
+ "\340\377\202\342\345\340\377\6\343\345\341\377\343\346\341\377\343\346"
+ "\342\377\344\347\342\377\344\347\343\377\345\347\343\377\202\345\350"
+ "\344\377\7\346\350\345\377\346\351\345\377\347\351\345\377\347\351\346"
+ "\377\347\352\346\377\350\352\347\377\350\353\347\377\204\351\353\350"
+ "\377\21\350\353\347\377\350\352\347\377\350\352\346\377\347\351\346\377"
+ "\347\351\345\377\346\350\345\377\346\350\344\377\345\350\344\377\345"
+ "\347\343\377\344\347\343\377\344\346\342\377\343\346\342\377\343\346"
+ "\341\377\342\345\341\377\342\345\340\377\341\344\340\377\341\344\337"
+ "\377\202\340\343\336\377\21\337\343\335\377\337\342\335\377\337\342\334"
+ "\377\336\341\334\377\336\341\333\377\335\340\333\377\335\340\332\377"
+ "\334\340\332\377\334\337\331\377\333\337\331\377\333\336\330\377\332"
+ "\336\330\377\332\336\327\377\331\335\327\377\331\335\326\377\330\334"
+ "\326\377\330\334\325\377\202\327\333\324\377\22\326\333\323\377\326\332"
+ "\323\377\326\332\322\377\325\331\322\377\325\331\321\377\324\330\321"
+ "\377\324\330\320\377\323\330\320\377\323\327\317\377\322\327\317\377"
+ "\322\326\316\377\321\326\316\377\321\326\315\377\320\325\315\377\320"
+ "\325\314\377\317\324\314\377\317\324\313\377\316\323\313\377\202\316"
+ "\323\312\377\12\315\322\311\377\315\322\310\377\314\321\310\377\314\321"
+ "\307\377\313\320\307\377\313\320\306\377\312\320\306\377\312\317\305"
+ "\377\267\275\264\377uxs\377\205oqm\377\2oqm\342oqm\32\377\377\377\377"
+ "\0\202\377\377\377\0\2\235\237\233\2\235\237\233\276\205\235\237\233"
+ "\377\7\236\240\234\377\311\314\306\377\331\335\327\377\332\336\327\377"
+ "\347\352\346\377\375\375\375\377\376\376\375\377\203\375\376\375\377"
+ "\204\375\375\375\377\202\374\375\374\377\7\374\374\374\377\366\367\365"
+ "\377\344\347\342\377\340\343\336\377\340\344\337\377\341\344\337\377"
+ "\341\344\340\377\202\342\345\340\377\6\343\345\341\377\343\346\341\377"
+ "\343\346\342\377\344\347\342\377\344\347\343\377\345\347\343\377\202"
+ "\345\350\344\377\5\346\350\345\377\346\351\345\377\347\351\345\377\347"
+ "\351\346\377\347\352\346\377\202\350\352\347\377\202\351\353\350\377"
+ "\23\352\354\351\377\351\353\350\377\351\353\347\377\350\352\347\377\350"
+ "\352\346\377\347\351\346\377\347\351\345\377\346\351\345\377\346\350"
+ "\344\377\345\350\344\377\345\347\343\377\344\347\343\377\344\346\342"
+ "\377\343\346\342\377\343\346\341\377\342\345\341\377\342\345\340\377"
+ "\341\344\340\377\341\344\337\377\202\340\343\336\377\22\340\343\335\377"
+ "\337\342\335\377\337\342\334\377\336\341\334\377\336\341\333\377\335"
+ "\341\333\377\335\340\332\377\334\340\332\377\334\337\331\377\333\337"
+ "\331\377\333\336\330\377\332\336\330\377\332\336\327\377\331\335\327"
+ "\377\331\335\326\377\330\334\326\377\330\334\325\377\330\333\325\377"
+ "\202\327\333\324\377\21\326\332\323\377\326\332\322\377\325\331\322\377"
+ "\325\331\321\377\324\330\321\377\324\330\320\377\323\330\320\377\323"
+ "\327\317\377\322\327\317\377\322\326\316\377\321\326\316\377\321\326"
+ "\315\377\320\325\315\377\320\325\314\377\317\324\314\377\317\324\313"
+ "\377\317\323\313\377\202\316\323\312\377\202\315\322\311\377\12\314\321"
+ "\310\377\314\321\307\377\313\320\307\377\313\320\306\377\312\320\306"
+ "\377\312\317\305\377\311\317\305\377\311\316\304\377\263\270\257\377"
+ "qto\377\205oqm\377\2oqm\315oqm\6\377\377\377\377\0\2\377\377\377\0\235"
+ "\237\233q\206\235\237\233\377\4\301\304\277\377\331\335\327\377\332\336"
+ "\327\377\352\354\350\377\210\375\375\375\377\202\375\375\374\377\10\374"
+ "\375\374\377\374\374\374\377\361\363\360\377\341\344\337\377\340\343"
+ "\336\377\340\344\337\377\341\344\337\377\341\344\340\377\202\342\345"
+ "\340\377\6\342\345\341\377\343\346\341\377\343\346\342\377\344\346\342"
+ "\377\344\347\343\377\345\347\343\377\202\345\350\344\377\5\346\350\344"
+ "\377\346\351\345\377\347\351\345\377\347\351\346\377\347\352\346\377"
+ "\202\350\352\347\377\202\351\353\350\377\22\352\354\351\377\351\353\350"
+ "\377\351\353\347\377\350\352\347\377\350\352\346\377\347\351\346\377"
+ "\347\351\345\377\346\351\345\377\346\350\344\377\345\350\344\377\345"
+ "\347\343\377\344\347\343\377\344\346\342\377\343\346\342\377\343\346"
+ "\341\377\342\345\341\377\342\345\340\377\341\344\340\377\202\341\344"
+ "\337\377\202\340\343\336\377\17\337\342\335\377\337\342\334\377\336\341"
+ "\334\377\336\341\333\377\335\341\333\377\335\340\332\377\334\340\332"
+ "\377\334\337\331\377\333\337\331\377\333\336\330\377\332\336\330\377"
+ "\332\336\327\377\331\335\327\377\331\335\326\377\331\334\326\377\202"
+ "\330\334\325\377\202\327\333\324\377\202\326\332\323\377\202\325\331"
+ "\322\377\13\324\331\321\377\324\330\320\377\323\330\320\377\323\327\317"
+ "\377\322\327\317\377\322\326\316\377\321\326\316\377\321\326\315\377"
+ "\320\325\315\377\320\325\314\377\320\324\314\377\202\317\324\313\377"
+ "\202\316\323\312\377\202\315\322\311\377\202\314\321\310\377\11\313\321"
+ "\307\377\313\320\306\377\312\320\306\377\312\317\305\377\311\317\305"
+ "\377\311\316\304\377\310\316\304\377\310\316\303\377\251\255\245\377"
+ "\206oqm\377\1oqm\207\377\377\377\377\0\2\235\237\233&\235\237\233\366"
+ "\205\235\237\233\377\4\271\274\266\377\331\335\326\377\331\335\327\377"
+ "\346\351\344\377\210\375\375\375\377\202\375\375\374\377\3\374\375\374"
+ "\377\374\374\374\377\354\356\353\377\202\340\343\336\377\1\340\344\337"
+ "\377\202\341\344\337\377\202\342\345\340\377\4\342\345\341\377\343\346"
+ "\341\377\343\346\342\377\344\346\342\377\202\344\347\343\377\7\345\347"
+ "\343\377\345\350\344\377\346\350\344\377\346\351\345\377\347\351\345"
+ "\377\347\351\346\377\347\352\346\377\202\350\352\347\377\205\351\353"
+ "\350\377\21\350\352\347\377\350\352\346\377\347\351\346\377\347\351\345"
+ "\377\346\351\345\377\346\350\344\377\345\350\344\377\345\347\343\377"
+ "\344\347\343\377\344\347\342\377\343\346\342\377\343\346\341\377\335"
+ "\340\334\377\330\333\326\377\324\326\322\377\330\333\326\377\336\341"
+ "\334\377\202\340\343\336\377\202\337\342\335\377\202\336\341\334\377"
+ "\13\335\341\333\377\335\340\332\377\334\340\332\377\334\337\331\377\333"
+ "\337\331\377\333\336\330\377\332\336\330\377\332\336\327\377\332\335"
+ "\327\377\331\335\326\377\331\334\326\377\202\330\334\325\377\202\327"
+ "\333\324\377\202\326\332\323\377\202\325\331\322\377\5\324\331\321\377"
+ "\324\330\320\377\323\330\320\377\323\327\317\377\322\327\317\377\202"
+ "\322\326\316\377\4\321\326\315\377\320\325\315\377\320\325\314\377\320"
+ "\324\314\377\202\317\324\313\377\202\316\323\312\377\202\315\322\311"
+ "\377\202\314\321\310\377\13\313\321\307\377\313\320\307\377\312\320\306"
+ "\377\312\317\306\377\311\317\305\377\311\316\304\377\310\316\304\377"
+ "\310\316\303\377\310\315\303\377\307\315\302\377\235\241\232\377\205"
+ "oqm\377\2oqm\374oqm7\375\377\377\377\0\2\235\237\233\2\235\237\233\306"
+ "\205\235\237\233\377\6\261\263\256\377\331\335\326\377\331\335\327\377"
+ "\336\342\334\377\372\373\372\377\375\375\374\377\206\375\375\375\377"
+ "\202\375\375\374\377\3\374\375\374\377\373\373\372\377\350\352\346\377"
+ "\203\340\343\336\377\202\341\344\337\377\202\342\345\340\377\4\342\345"
+ "\341\377\343\346\341\377\343\346\342\377\344\346\342\377\202\344\347"
+ "\343\377\3\345\347\343\377\345\350\344\377\346\350\344\377\202\346\351"
+ "\345\377\2\347\351\346\377\347\352\346\377\202\350\352\347\377\1\351"
+ "\353\347\377\204\351\353\350\377\202\350\352\347\377\13\335\340\334\377"
+ "\313\315\312\377\270\272\266\377\246\250\244\377\224\226\222\377\214"
+ "\216\212\377\206\210\204\377\200\203~\377{}y\377uws\377prn\377\205oq"
+ "m\377\20qso\377vxt\377|~z\377\201\203\177\377\206\210\204\377\213\216"
+ "\211\377\225\227\223\377\245\250\243\377\265\270\262\377\305\310\303"
+ "\377\325\331\322\377\333\336\330\377\332\336\327\377\332\335\327\377"
+ "\331\335\326\377\331\334\326\377\202\330\334\325\377\202\327\333\324"
+ "\377\202\326\332\323\377\15\325\332\322\377\325\331\322\377\324\331\321"
+ "\377\324\330\321\377\323\330\320\377\323\327\320\377\322\327\317\377"
+ "\322\327\316\377\322\326\316\377\321\326\315\377\321\325\315\377\320"
+ "\325\314\377\320\324\314\377\202\317\324\313\377\202\316\323\312\377"
+ "\202\315\322\311\377\202\314\321\310\377\4\313\321\307\377\313\320\307"
+ "\377\312\320\306\377\312\317\306\377\202\311\317\305\377\7\311\316\304"
+ "\377\310\316\303\377\310\315\303\377\307\315\302\377\307\314\302\377"
+ "\306\314\301\377\221\225\216\377\205oqm\377\2oqm\327oqm\10\374\377\377"
+ "\377\0\1\235\237\233v\205\235\237\233\377\5\244\246\241\377\325\331\323"
+ "\377\331\335\327\377\332\336\327\377\364\365\364\377\203\374\375\374"
+ "\377\204\375\375\374\377\203\374\375\374\377\3\370\371\370\377\344\347"
+ "\342\377\337\343\336\377\202\340\343\336\377\202\341\344\337\377\202"
+ "\342\345\340\377\15\342\345\341\377\343\346\341\377\343\346\342\377\344"
+ "\346\342\377\344\347\342\377\344\347\343\377\345\347\343\377\345\350"
+ "\344\377\346\350\344\377\346\350\345\377\346\351\345\377\347\351\346"
+ "\377\347\352\346\377\202\350\352\347\377\1\350\353\347\377\202\351\353"
+ "\350\377\5\326\330\325\377\264\266\263\377\234\236\232\377\212\214\210"
+ "\377wyu\377\233oqm\377\6xzv\377\211\213\206\377\231\234\227\377\265\267"
+ "\262\377\320\324\315\377\330\334\325\377\202\327\333\324\377\202\326"
+ "\332\323\377\15\325\332\322\377\325\331\322\377\324\331\321\377\324\330"
+ "\321\377\323\330\320\377\323\327\320\377\323\327\317\377\322\327\317"
+ "\377\322\326\316\377\321\326\316\377\321\325\315\377\320\325\314\377"
+ "\320\324\314\377\202\317\324\313\377\202\316\323\312\377\202\315\322"
+ "\311\377\15\314\322\310\377\314\321\310\377\313\321\307\377\313\320\307"
+ "\377\312\320\306\377\312\317\306\377\312\317\305\377\311\317\305\377"
+ "\311\316\304\377\310\316\304\377\310\315\303\377\307\315\302\377\307"
+ "\314\302\377\202\306\314\301\377\2\303\311\276\377}\200{\377\205oqm\377"
+ "\1oqm\215\373\377\377\377\0\2\235\237\233(\235\237\233\370\205\235\237"
+ "\233\377\4\310\314\306\377\331\335\327\377\332\336\327\377\353\355\352"
+ "\377\204\374\374\374\377\206\374\375\374\377\3\366\367\365\377\341\344"
+ "\340\377\337\343\335\377\202\340\343\336\377\202\341\344\337\377\25\341"
+ "\344\340\377\342\345\340\377\342\345\341\377\343\346\341\377\343\346"
+ "\342\377\344\346\342\377\344\347\342\377\344\347\343\377\345\347\343"
+ "\377\345\350\344\377\346\350\344\377\346\350\345\377\346\351\345\377"
+ "\347\351\346\377\347\352\346\377\350\352\346\377\350\352\347\377\341"
+ "\344\340\377\302\304\301\377\241\243\237\377\177\201}\377\244oqm\377"
+ "\20prn\377\205\207\203\377\242\245\240\377\277\302\274\377\325\331\322"
+ "\377\325\332\322\377\325\331\322\377\324\331\321\377\324\330\321\377"
+ "\324\330\320\377\323\330\320\377\323\327\317\377\322\327\317\377\322"
+ "\326\316\377\321\326\316\377\321\325\315\377\202\320\325\314\377\202"
+ "\317\324\313\377\202\316\323\312\377\202\315\322\311\377\17\314\322\310"
+ "\377\314\321\310\377\314\321\307\377\313\320\307\377\313\320\306\377"
+ "\312\317\306\377\312\317\305\377\311\317\305\377\311\316\304\377\310"
+ "\316\304\377\310\315\303\377\307\315\303\377\307\314\302\377\306\314"
+ "\302\377\306\314\301\377\202\305\313\300\377\2\263\270\257\377prn\377"
+ "\204oqm\377\2oqm\375oqm;\372\377\377\377\0\1\235\237\233\255\205\235"
+ "\237\233\377\5\265\267\262\377\331\335\327\377\332\336\327\377\342\345"
+ "\340\377\373\374\373\377\206\374\374\374\377\1\374\375\374\377\202\374"
+ "\374\374\377\3\367\370\366\377\341\344\337\377\337\343\335\377\202\340"
+ "\343\336\377\202\341\344\337\377\4\341\344\340\377\342\345\340\377\342"
+ "\345\341\377\343\346\341\377\202\343\346\342\377\16\344\347\342\377\344"
+ "\347\343\377\345\347\343\377\345\350\344\377\346\350\344\377\346\350"
+ "\345\377\346\351\345\377\347\351\345\377\347\351\346\377\344\346\342"
+ "\377\273\275\272\377\216\220\214\377suq\377qso\377\252oqm\377\17uxs\377"
+ "\223\226\221\377\277\302\273\377\324\330\321\377\324\330\320\377\323"
+ "\330\320\377\323\327\317\377\322\327\317\377\322\326\316\377\321\326"
+ "\316\377\321\325\315\377\320\325\315\377\320\325\314\377\317\324\314"
+ "\377\317\324\313\377\202\316\323\312\377\202\315\322\311\377\20\315\322"
+ "\310\377\314\321\310\377\314\321\307\377\313\320\307\377\313\320\306"
+ "\377\312\320\306\377\312\317\305\377\311\317\305\377\311\316\304\377"
+ "\310\316\304\377\310\315\303\377\307\315\303\377\307\315\302\377\306"
+ "\314\302\377\306\314\301\377\305\313\301\377\203\305\313\300\377\1\230"
+ "\234\224\377\205oqm\377\1oqm\305\371\377\377\377\0\2\235\237\2330\235"
+ "\237\233\376\204\235\237\233\377\5\244\246\242\377\326\332\324\377\332"
+ "\336\327\377\334\340\332\377\367\370\366\377\202\373\374\373\377\1\374"
+ "\374\373\377\206\374\374\374\377\3\370\371\370\377\342\345\340\377\337"
+ "\343\335\377\202\340\343\336\377\202\341\344\337\377\11\341\344\340\377"
+ "\342\345\340\377\342\345\341\377\343\345\341\377\343\346\341\377\343"
+ "\346\342\377\344\347\342\377\344\347\343\377\345\347\343\377\202\345"
+ "\350\344\377\11\346\350\345\377\346\351\345\377\347\351\345\377\333\335"
+ "\331\377\254\256\252\377}\177{\377suq\377qso\377prn\377\256oqm\377\14"
+ "\204\206\202\377\257\262\254\377\321\325\315\377\322\327\317\377\322"
+ "\326\316\377\321\326\316\377\321\325\315\377\320\325\315\377\320\325"
+ "\314\377\317\324\314\377\317\324\313\377\316\323\313\377\202\316\323"
+ "\312\377\21\315\322\311\377\315\322\310\377\314\321\310\377\314\321\307"
+ "\377\313\320\307\377\313\320\306\377\312\320\306\377\312\317\305\377"
+ "\311\317\305\377\311\316\304\377\310\316\304\377\310\315\303\377\307"
+ "\315\303\377\307\315\302\377\306\314\302\377\306\314\301\377\305\313"
+ "\301\377\204\305\313\300\377\2\303\311\276\377~\200{\377\205oqm\377\1"
+ "oqmG\370\377\377\377\0\1\235\237\233\261\205\235\237\233\377\5\307\312"
+ "\305\377\332\336\327\377\332\336\330\377\357\360\356\377\373\373\373"
+ "\377\203\373\374\373\377\203\374\374\373\377\202\374\374\374\377\3\371"
+ "\372\371\377\343\346\341\377\337\343\335\377\202\340\343\336\377\202"
+ "\341\344\337\377\1\341\344\340\377\202\342\345\340\377\6\343\345\341"
+ "\377\343\346\341\377\343\346\342\377\344\347\342\377\344\347\343\377"
+ "\345\347\343\377\202\345\350\344\377\11\346\350\345\377\346\351\345\377"
+ "\317\321\315\377\234\236\232\377wyu\377tvr\377rtp\377qso\377prn\377\213"
+ "oqm\377\27oqm\373oqm\332oqm\265oqm\226oqm\211oqm}oqmqoqmeoqmYoqmMoqm"
+ "Aoqm9oqmCoqmOoqm[oqmfoqmroqm~oqm\212oqm\226oqm\265oqm\334oqm\374\217"
+ "oqm\377\11xzv\377\240\243\235\377\312\317\310\377\321\326\315\377\320"
+ "\325\315\377\320\325\314\377\317\324\314\377\317\324\313\377\316\323"
+ "\313\377\202\316\323\312\377\21\315\322\311\377\315\322\310\377\314\321"
+ "\310\377\314\321\307\377\313\320\307\377\313\320\306\377\312\320\306"
+ "\377\312\317\305\377\311\317\305\377\311\316\304\377\310\316\304\377"
+ "\310\316\303\377\307\315\303\377\307\315\302\377\306\314\302\377\306"
+ "\314\301\377\306\313\301\377\206\305\313\300\377\1\263\270\257\377\205"
+ "oqm\377\1oqm\311\367\377\377\377\0\1\235\237\2334\205\235\237\233\377"
+ "\1\252\254\250\377\202\332\336\327\377\2\337\342\335\377\372\373\372"
+ "\377\202\373\373\373\377\204\373\374\373\377\203\374\374\373\377\2\347"
+ "\351\346\377\337\343\335\377\202\340\343\336\377\3\340\344\337\377\341"
+ "\344\337\377\341\344\340\377\202\342\345\340\377\6\343\345\341\377\343"
+ "\346\341\377\343\346\342\377\344\346\342\377\344\347\343\377\345\347"
+ "\343\377\202\345\350\344\377\11\346\350\344\377\336\341\335\377\242\244"
+ "\240\377vxt\377uws\377suq\377rtp\377qso\377prn\377\206oqm\377\7oqm\376"
+ "oqm\320oqm\224oqmooqmIoqm$oqm\4\225\377\377\377\0\6oqm\6oqm*oqmQoqmx"
+ "oqm\243oqm\346\214oqm\377\6wzu\377\256\262\253\377\320\325\314\377\317"
+ "\324\314\377\317\324\313\377\317\323\313\377\202\316\323\312\377\202"
+ "\315\322\311\377\202\314\321\310\377\15\313\320\307\377\313\320\306\377"
+ "\312\320\306\377\312\317\305\377\311\317\305\377\311\316\304\377\310"
+ "\316\304\377\310\316\303\377\307\315\303\377\307\315\302\377\307\314"
+ "\302\377\306\314\301\377\306\313\301\377\210\305\313\300\377\1\213\216"
+ "\210\377\205oqm\377\1oqmK\366\377\377\377\0\1\235\237\233\265\205\235"
+ "\237\233\377\6\310\314\306\377\332\336\327\377\332\336\330\377\356\360"
+ "\355\377\372\373\372\377\373\373\372\377\203\373\373\373\377\204\373"
+ "\374\373\377\2\357\360\355\377\337\343\335\377\202\340\343\336\377\1"
+ "\340\344\337\377\202\341\344\337\377\202\342\345\340\377\5\342\345\341"
+ "\377\343\346\341\377\343\346\342\377\344\346\342\377\344\347\343\377"
+ "\202\345\347\343\377\12\345\350\344\377\346\350\344\377\275\300\274\377"
+ "\200\202~\377vxt\377tvr\377suq\377rtp\377qso\377prn\377\204oqm\377\4"
+ "oqm\353oqm\246oqm_oqm\30\241\377\377\377\0\4oqm.oqmvoqm\276oqm\372\212"
+ "oqm\377\3\212\214\207\377\302\307\276\377\317\324\313\377\202\316\323"
+ "\312\377\202\315\322\311\377\202\314\321\310\377\13\313\321\307\377\313"
+ "\320\307\377\312\320\306\377\312\317\306\377\311\317\305\377\311\316"
+ "\304\377\310\316\304\377\310\316\303\377\310\315\303\377\307\315\302"
+ "\377\307\314\302\377\202\306\314\301\377\211\305\313\300\377\1\266\273"
+ "\261\377\205oqm\377\1oqm\315\365\377\377\377\0\1\235\237\2336\205\235"
+ "\237\233\377\5\253\255\251\377\332\336\327\377\332\336\330\377\336\342"
+ "\333\377\371\372\371\377\202\372\373\372\377\1\373\373\372\377\204\373"
+ "\373\373\377\2\373\374\373\377\365\366\365\377\204\340\343\336\377\202"
+ "\341\344\337\377\202\342\345\340\377\4\342\345\341\377\343\346\341\377"
+ "\343\346\342\377\344\346\342\377\202\344\347\343\377\12\345\347\343\377"
+ "\345\350\344\377\326\330\324\377\224\226\222\377wyu\377uws\377tvr\377"
+ "suq\377rtp\377qso\377\203oqm\377\4oqm\360oqm\215oqm5oqm\2\247\377\377"
+ "\377\0\4oqm\14oqmQoqm\271oqm\376\210oqm\377\2rtp\377\241\244\236\377"
+ "\203\315\322\311\377\202\314\321\310\377\5\313\321\307\377\313\320\307"
+ "\377\312\320\306\377\312\317\306\377\311\317\305\377\202\311\316\304"
+ "\377\4\310\316\303\377\310\315\303\377\307\315\302\377\307\314\302\377"
+ "\202\306\314\301\377\213\305\313\300\377\1\213\216\210\377\205oqm\377"
+ "\1oqmL\364\377\377\377\0\1\235\237\233\233\205\235\237\233\377\5\312"
+ "\315\307\377\332\336\330\377\333\336\330\377\354\356\353\377\372\372"
+ "\372\377\203\372\373\372\377\202\373\373\372\377\202\373\373\373\377"
+ "\2\373\373\372\377\343\346\342\377\203\340\343\336\377\202\341\344\337"
+ "\377\202\342\345\340\377\20\342\345\341\377\343\346\341\377\343\346\342"
+ "\377\344\346\342\377\344\347\342\377\344\347\343\377\345\347\343\377"
+ "\345\350\344\377\312\314\310\377\177\201}\377vxt\377uws\377tvr\377su"
+ "q\377rtp\377prn\377\202oqm\377\3oqm\327oqmjoqm\13\255\377\377\377\0\3"
+ "oqm)oqm\227oqm\365\210oqm\377\17\215\220\212\377\312\317\306\377\314"
+ "\322\310\377\314\321\310\377\313\321\307\377\313\320\307\377\312\320"
+ "\306\377\312\317\306\377\312\317\305\377\311\317\305\377\311\316\304"
+ "\377\310\316\304\377\310\315\303\377\307\315\302\377\307\314\302\377"
+ "\202\306\314\301\377\214\305\313\300\377\1\266\273\261\377\205oqm\377"
+ "\1oqm\260\363\377\377\377\0\2\235\237\233\10\235\237\233\360\204\235"
+ "\237\233\377\6\252\255\250\377\332\336\330\377\333\336\330\377\335\341"
+ "\333\377\370\371\370\377\372\372\371\377\204\372\373\372\377\203\373"
+ "\373\372\377\2\357\361\357\377\337\343\336\377\202\340\343\336\377\202"
+ "\341\344\337\377\26\341\344\340\377\342\345\340\377\342\345\341\377\343"
+ "\346\341\377\343\346\342\377\344\346\342\377\344\347\342\377\344\347"
+ "\343\377\345\347\343\377\345\350\344\377\274\276\272\377y{w\377vxt\377"
+ "uws\377tvr\377suq\377qso\377prn\377oqm\377oqm\304oqmFoqm\1\261\377\377"
+ "\377\0\3oqm\21oqmyoqm\363\207oqm\377\17\203\206\201\377\304\311\301\377"
+ "\314\321\307\377\313\320\307\377\313\320\306\377\312\317\306\377\312"
+ "\317\305\377\311\317\305\377\311\316\304\377\310\316\304\377\310\315"
+ "\303\377\307\315\303\377\307\314\302\377\306\314\302\377\306\314\301"
+ "\377\216\305\313\300\377\1\213\216\210\377\204oqm\377\2oqm\372oqm\23"
+ "\362\377\377\377\0\1\235\237\233V\203\235\237\233\377\6\234\236\232\377"
+ "\233\235\231\377\304\307\302\377\332\336\330\377\333\337\331\377\352"
+ "\354\350\377\203\372\372\371\377\205\372\373\372\377\2\371\372\371\377"
+ "\341\345\340\377\202\340\343\336\377\202\341\344\337\377\4\341\344\340"
+ "\377\342\345\340\377\342\345\341\377\343\346\341\377\202\343\346\342"
+ "\377\17\344\347\342\377\344\347\343\377\345\347\343\377\345\350\344\377"
+ "\254\256\252\377wyu\377vxt\377uws\377tvr\377rtp\377qso\377prn\377oqm"
+ "\355oqmdoqm\1\265\377\377\377\0\2oqm\35oqm\260\207oqm\377\15{~y\377\275"
+ "\302\272\377\313\320\306\377\312\320\306\377\312\317\305\377\311\317"
+ "\305\377\311\316\304\377\310\316\304\377\310\315\303\377\307\315\303"
+ "\377\307\315\302\377\306\314\302\377\306\314\301\377\217\305\313\300"
+ "\377\1\257\264\253\377\205oqm\377\1oqmj\362\377\377\377\0\1\235\237\233"
+ "\264\202\235\237\233\377\7\234\236\232\377\233\235\231\377\236\240\234"
+ "\377\330\334\326\377\333\337\330\377\334\340\332\377\367\367\366\377"
+ "\202\371\372\371\377\202\372\372\371\377\1\372\372\372\377\203\372\373"
+ "\372\377\1\355\357\353\377\202\340\343\336\377\202\341\344\337\377\3"
+ "\341\344\340\377\342\345\340\377\342\345\341\377\202\343\346\341\377"
+ "\17\343\346\342\377\344\347\342\377\344\347\343\377\345\347\343\377\345"
+ "\350\344\377\244\246\242\377wyu\377vxt\377tvr\377suq\377rtp\377qso\377"
+ "prn\377oqm\242oqm\25\271\377\377\377\0\2oqmOoqm\342\206oqm\377\14vxt"
+ "\377\276\303\272\377\312\317\305\377\311\317\305\377\311\316\304\377"
+ "\310\316\304\377\310\315\303\377\307\315\303\377\307\315\302\377\306"
+ "\314\302\377\306\314\301\377\305\313\301\377\217\305\313\300\377\2\304"
+ "\312\277\377y{v\377\204oqm\377\1oqm\307\361\377\377\377\0\12\235\237"
+ "\233\26\235\237\233\373\235\237\233\377\234\236\232\377\233\235\231\377"
+ "\231\233\227\377\262\265\260\377\333\337\330\377\333\337\331\377\345"
+ "\347\343\377\204\371\372\371\377\1\372\372\371\377\202\372\372\372\377"
+ "\4\372\373\372\377\371\372\371\377\341\344\340\377\340\343\336\377\202"
+ "\341\344\337\377\1\341\344\340\377\202\342\345\340\377\20\343\345\341"
+ "\377\343\346\341\377\343\346\342\377\344\347\342\377\344\347\343\377"
+ "\345\347\343\377\345\350\344\377\263\266\262\377wyu\377uws\377tvr\377"
+ "suq\377rtp\377qso\377oqm\367oqmV\274\377\377\377\0\2oqm\17oqm\274\206"
+ "oqm\377\12~\200{\377\304\312\300\377\311\316\304\377\310\316\304\377"
+ "\310\316\303\377\307\315\303\377\307\315\302\377\306\314\302\377\306"
+ "\314\301\377\306\313\301\377\221\305\313\300\377\1\227\233\224\377\205"
+ "oqm\377\1oqm$\360\377\377\377\0\13\235\237\233o\235\237\233\377\234\236"
+ "\232\377\232\234\230\377\231\233\227\377\230\232\226\377\313\317\310"
+ "\377\333\337\331\377\334\337\331\377\355\357\354\377\371\371\370\377"
+ "\204\371\372\371\377\1\372\372\371\377\202\372\372\372\377\5\360\362"
+ "\357\377\340\343\336\377\340\344\337\377\341\344\337\377\341\344\340"
+ "\377\202\342\345\340\377\20\343\345\341\377\343\346\341\377\343\346\342"
+ "\377\344\347\342\377\344\347\343\377\345\347\343\377\345\350\344\377"
+ "\302\305\301\377vxt\377uws\377tvr\377suq\377rtp\377prn\377oqm\353oqm"
+ ":\276\377\377\377\0\2oqm\5oqm\236\206oqm\377\10\211\214\206\377\307\315"
+ "\303\377\310\316\303\377\307\315\303\377\307\315\302\377\307\314\302"
+ "\377\306\314\301\377\306\313\301\377\222\305\313\300\377\1\267\275\263"
+ "\377\205oqm\377\1oqm\200\360\377\377\377\0\13\235\237\233\277\233\235"
+ "\231\377\232\234\230\377\231\233\227\377\230\232\226\377\240\243\236"
+ "\377\333\337\331\377\334\337\331\377\334\340\332\377\366\367\365\377"
+ "\371\371\370\377\205\371\372\371\377\202\372\372\371\377\4\346\351\345"
+ "\377\340\344\337\377\341\344\337\377\341\344\340\377\202\342\345\340"
+ "\377\5\342\345\341\377\343\346\341\377\343\346\342\377\344\346\342\377"
+ "\344\347\343\377\202\345\347\343\377\11\316\321\315\377z|x\377uws\377"
+ "tvr\377suq\377qso\377prn\377oqm\332oqm$\301\377\377\377\0\1oqm|\206o"
+ "qm\377\6\226\232\223\377\310\315\303\377\307\315\302\377\307\314\302"
+ "\377\306\314\301\377\306\313\301\377\224\305\313\300\377\1\200\203~\377"
+ "\204oqm\377\1oqm\313\357\377\377\377\0\12\234\236\232\7\233\235\231\367"
+ "\232\234\230\377\231\233\227\377\230\232\226\377\226\230\224\377\267"
+ "\272\265\377\333\337\331\377\334\340\332\377\341\345\340\377\202\370"
+ "\371\370\377\2\371\371\370\377\371\371\371\377\203\371\372\371\377\3"
+ "\372\372\371\377\366\367\366\377\340\344\337\377\202\341\344\337\377"
+ "\202\342\345\340\377\4\342\345\341\377\343\346\341\377\343\346\342\377"
+ "\344\346\342\377\202\344\347\343\377\12\345\347\343\377\342\345\341\377"
+ "\206\210\204\377uws\377tvr\377rtp\377qso\377prn\377oqm\340oqm\27\303"
+ "\377\377\377\0\1oqm\213\206oqm\377\2\256\263\252\377\307\314\302\377"
+ "\202\306\314\301\377\225\305\313\300\377\1\236\242\233\377\204oqm\377"
+ "\2oqm\374oqm\15\356\377\377\377\0\7\233\235\231=\232\234\230\377\231"
+ "\233\227\377\227\231\225\377\226\230\224\377\225\227\223\377\311\315"
+ "\307\377\202\334\340\332\377\1\352\354\350\377\202\370\371\370\377\202"
+ "\371\371\370\377\204\371\372\371\377\1\355\356\353\377\202\341\344\337"
+ "\377\202\342\345\340\377\4\342\345\341\377\343\346\341\377\343\346\342"
+ "\377\344\346\342\377\202\344\347\343\377\12\345\347\343\377\345\350\344"
+ "\377\254\256\252\377uws\377suq\377rtp\377qso\377prn\377oqm\363oqm.\304"
+ "\377\377\377\0\2oqm\2oqm\260\205oqm\377\3{}y\377\303\311\276\377\306"
+ "\314\301\377\226\305\313\300\377\1\264\271\260\377\205oqm\377\1oqmG\356"
+ "\377\377\377\0\12\231\233\227|\230\232\226\377\227\231\225\377\226\230"
+ "\224\377\225\227\223\377\226\230\224\377\332\335\327\377\334\340\332"
+ "\377\335\340\332\377\362\364\361\377\203\370\371\370\377\202\371\371"
+ "\370\377\203\371\372\371\377\2\347\351\345\377\341\344\337\377\202\342"
+ "\345\340\377\20\342\345\341\377\343\346\341\377\343\346\342\377\344\346"
+ "\342\377\344\347\342\377\344\347\343\377\345\347\343\377\345\350\344"
+ "\377\323\325\321\377vxt\377suq\377rtp\377qso\377prn\377oqm\375oqmM\306"
+ "\377\377\377\0\2oqm\13oqm\316\205oqm\377\1\231\235\226\377\227\305\313"
+ "\300\377\2\304\312\277\377tvr\377\204oqm\377\1oqm\205\356\377\377\377"
+ "\0\12\230\232\226\274\227\231\225\377\226\230\224\377\224\226\222\377"
+ "\223\225\221\377\244\246\241\377\334\340\332\377\335\340\332\377\337"
+ "\343\335\377\367\370\367\377\205\370\371\370\377\23\371\371\370\377\371"
+ "\372\371\377\371\371\370\377\342\345\340\377\341\344\340\377\342\345"
+ "\340\377\342\345\341\377\343\346\341\377\343\346\342\377\344\346\342"
+ "\377\344\347\342\377\344\347\343\377\345\347\343\377\345\350\344\377"
+ "\346\350\344\377\216\220\215\377suq\377rtp\377qso\377\202oqm\377\1oq"
+ "m\177\310\377\377\377\0\2oqm,oqm\373\204oqm\377\2qso\377\270\275\263"
+ "\377\206\305\313\300\377\10\307\315\302\377\312\317\305\377\311\317\304"
+ "\377\310\316\304\377\310\315\303\377\307\315\302\377\307\314\302\377"
+ "\306\314\301\377\202\305\313\300\377\2\306\314\301\377\305\313\301\377"
+ "\205\305\313\300\377\1\207\212\204\377\204oqm\377\1oqm\303\355\377\377"
+ "\377\0\14\230\232\226\5\227\231\225\365\225\227\223\377\224\226\222\377"
+ "\223\225\221\377\222\224\220\377\265\270\263\377\335\340\332\377\335"
+ "\340\333\377\347\351\345\377\370\370\367\377\370\371\367\377\203\370"
+ "\371\370\377\203\371\371\370\377\4\364\365\363\377\341\344\340\377\342"
+ "\345\340\377\342\345\341\377\202\343\346\341\377\12\343\346\342\377\344"
+ "\347\342\377\344\347\343\377\345\347\343\377\345\350\344\377\346\350"
+ "\344\377\303\305\301\377suq\377qso\377prn\377\202oqm\377\2oqm\325oqm"
+ "\6\311\377\377\377\0\1oqm\211\205oqm\377\1\217\222\214\377\206\305\313"
+ "\300\377\14\311\317\304\377\317\324\313\377\316\323\311\377\314\322\310"
+ "\377\313\320\306\377\312\317\305\377\310\316\304\377\307\315\302\377"
+ "\306\314\301\377\305\313\300\377\307\314\302\377\306\314\301\377\205"
+ "\305\313\300\377\1\234\240\230\377\204oqm\377\2oqm\371oqm\10\354\377"
+ "\377\377\0\15\226\230\2249\225\227\223\377\224\226\222\377\223\225\221"
+ "\377\222\224\220\377\220\222\216\377\307\313\305\377\335\340\333\377"
+ "\335\341\333\377\355\356\354\377\367\370\367\377\370\370\367\377\370"
+ "\371\367\377\203\370\371\370\377\202\371\371\370\377\1\357\360\356\377"
+ "\202\342\345\340\377\6\343\345\341\377\343\346\341\377\343\346\342\377"
+ "\344\347\342\377\344\347\343\377\345\347\343\377\202\345\350\344\377"
+ "\4\346\350\345\377\214\217\213\377qso\377prn\377\202oqm\377\2oqm\376"
+ "oqm<\312\377\377\377\0\2oqm\12oqm\340\204oqm\377\2qso\377\275\303\271"
+ "\377\205\305\313\300\377\10\311\317\304\377\317\324\313\377\316\323\311"
+ "\377\315\322\310\377\313\321\307\377\312\317\305\377\311\316\304\377"
+ "\307\315\302\377\202\306\314\301\377\2\307\315\302\377\306\314\301\377"
+ "\205\305\313\300\377\1\261\266\254\377\205oqm\377\1oqm\77\354\377\377"
+ "\377\0\4\225\227\223b\224\226\222\377\223\225\221\377\221\223\217\377"
+ "\202\220\222\216\377\6\332\335\330\377\335\341\333\377\336\341\334\377"
+ "\361\362\360\377\367\370\367\377\370\370\367\377\202\370\371\367\377"
+ "\204\370\371\370\377\10\352\354\351\377\342\345\340\377\343\345\341\377"
+ "\343\346\341\377\343\346\342\377\344\347\342\377\344\347\343\377\345"
+ "\347\343\377\202\345\350\344\377\4\346\350\345\377\314\316\312\377qs"
+ "o\377prn\377\203oqm\377\1oqm\243\314\377\377\377\0\1oqmR\205oqm\377\1"
+ "\231\235\226\377\205\305\313\300\377\14\311\317\304\377\317\324\313\377"
+ "\316\323\312\377\315\322\310\377\313\321\307\377\312\317\305\377\311"
+ "\316\304\377\310\315\303\377\307\315\302\377\307\314\302\377\307\315"
+ "\302\377\306\314\301\377\205\305\313\300\377\2\303\311\276\377qso\377"
+ "\204oqm\377\1oqml\354\377\377\377\0\12\224\226\222\206\222\224\220\377"
+ "\221\223\217\377\220\222\216\377\217\221\215\377\231\233\227\377\335"
+ "\341\333\377\336\341\333\377\336\341\334\377\365\366\365\377\202\367"
+ "\370\367\377\2\370\370\367\377\370\371\367\377\203\370\371\370\377\10"
+ "\371\371\370\377\347\351\345\377\342\345\341\377\343\346\341\377\343"
+ "\346\342\377\344\346\342\377\344\347\343\377\345\347\343\377\202\345"
+ "\350\344\377\4\346\350\344\377\346\351\345\377\226\230\224\377prn\377"
+ "\204oqm\377\1oqm,\314\377\377\377\0\2oqm\1oqm\333\204oqm\377\2vyt\377"
+ "\303\311\276\377\204\305\313\300\377\10\311\317\304\377\317\324\313\377"
+ "\316\323\312\377\315\322\310\377\314\321\307\377\312\320\306\377\311"
+ "\317\304\377\310\316\303\377\202\310\315\303\377\2\310\316\303\377\306"
+ "\314\301\377\206\305\313\300\377\1~\201|\377\204oqm\377\1oqm\217\354"
+ "\377\377\377\0\12\222\224\220\252\221\223\217\377\220\222\216\377\217"
+ "\221\215\377\215\217\213\377\242\245\240\377\336\341\333\377\336\341"
+ "\334\377\340\344\336\377\367\370\366\377\203\367\370\367\377\203\370"
+ "\371\367\377\202\370\371\370\377\4\345\350\344\377\343\346\341\377\343"
+ "\346\342\377\344\346\342\377\202\344\347\343\377\6\345\347\343\377\345"
+ "\350\344\377\346\350\344\377\346\351\345\377\335\337\333\377prn\377\204"
+ "oqm\377\1oqm\266\316\377\377\377\0\1oqmn\205oqm\377\1\250\255\244\377"
+ "\204\305\313\300\377\10\311\317\304\377\317\324\313\377\316\323\312\377"
+ "\315\322\311\377\314\321\307\377\313\320\306\377\312\317\305\377\311"
+ "\316\304\377\202\310\316\303\377\2\310\316\304\377\306\314\302\377\206"
+ "\305\313\300\377\1\212\215\207\377\204oqm\377\1oqm\262\354\377\377\377"
+ "\0\12\221\223\217\316\220\222\216\377\216\220\214\377\215\217\213\377"
+ "\214\216\212\377\255\260\253\377\336\341\334\377\336\342\334\377\345"
+ "\350\344\377\367\367\366\377\203\367\370\367\377\202\370\370\367\377"
+ "\1\370\371\367\377\202\370\371\370\377\3\344\347\342\377\343\346\342"
+ "\377\344\346\342\377\202\344\347\343\377\3\345\347\343\377\345\350\344"
+ "\377\346\350\344\377\202\346\351\345\377\1\267\271\266\377\205oqm\377"
+ "\1oqmA\316\377\377\377\0\2oqm\15oqm\362\204oqm\377\1\216\221\213\377"
+ "\204\305\313\300\377\10\311\317\305\377\320\325\314\377\317\324\312\377"
+ "\315\323\311\377\314\322\310\377\313\321\307\377\312\320\306\377\311"
+ "\317\305\377\202\311\316\304\377\2\311\317\304\377\307\314\302\377\206"
+ "\305\313\300\377\1\226\232\222\377\204oqm\377\1oqm\325\354\377\377\377"
+ "\0\11\217\221\215\362\216\220\214\377\215\217\213\377\214\216\212\377"
+ "\213\215\211\377\271\274\267\377\336\342\334\377\337\342\335\377\351"
+ "\353\350\377\203\367\370\366\377\202\367\370\367\377\17\370\370\367\377"
+ "\370\371\367\377\370\371\370\377\370\370\367\377\343\346\342\377\344"
+ "\346\342\377\344\347\342\377\344\347\343\377\345\347\343\377\345\350"
+ "\344\377\346\350\344\377\346\350\345\377\346\351\345\377\347\351\346"
+ "\377\217\222\216\377\204oqm\377\2oqm\341oqm\1\317\377\377\377\0\1oqm"
+ "\237\204oqm\377\2twr\377\304\312\277\377\203\305\313\300\377\7\311\317"
+ "\305\377\320\325\314\377\317\324\313\377\316\323\311\377\315\322\310"
+ "\377\314\321\307\377\313\320\306\377\204\312\317\305\377\1\307\315\302"
+ "\377\206\305\313\300\377\1\242\246\236\377\204oqm\377\2oqm\366oqm\1\352"
+ "\377\377\377\0\7\217\221\215\26\216\220\214\377\215\217\213\377\213\215"
+ "\211\377\212\214\210\377\211\213\207\377\305\310\303\377\202\337\342"
+ "\335\377\3\355\357\354\377\367\367\366\377\367\370\366\377\204\367\370"
+ "\367\377\16\370\370\367\377\370\371\367\377\366\367\366\377\344\346\342"
+ "\377\344\347\342\377\344\347\343\377\345\347\343\377\345\350\344\377"
+ "\346\350\344\377\346\350\345\377\346\351\345\377\347\351\346\377\337"
+ "\341\335\377qso\377\204oqm\377\1oqm\214\320\377\377\377\0\1oqmO\205o"
+ "qm\377\1\257\264\253\377\203\305\313\300\377\10\311\317\305\377\320\325"
+ "\314\377\317\324\313\377\316\323\312\377\315\322\311\377\314\321\310"
+ "\377\313\321\307\377\313\320\306\377\203\312\320\306\377\1\307\315\302"
+ "\377\206\305\313\300\377\1\255\262\251\377\205oqm\377\1oqm\32\352\377"
+ "\377\377\0\13\216\220\214:\214\216\212\377\213\215\211\377\212\214\210"
+ "\377\211\213\207\377\210\212\206\377\322\325\320\377\337\342\335\377"
+ "\337\343\335\377\362\363\361\377\366\367\366\377\202\367\370\366\377"
+ "\203\367\370\367\377\15\370\370\367\377\370\371\367\377\364\365\364\377"
+ "\344\347\342\377\344\347\343\377\345\347\343\377\345\350\344\377\346"
+ "\350\344\377\346\350\345\377\346\351\345\377\347\351\345\377\347\351"
+ "\346\377\300\302\276\377\205oqm\377\1oqm5\320\377\377\377\0\2oqm\11o"
+ "qm\365\204oqm\377\1\227\233\224\377\203\305\313\300\377\7\311\317\305"
+ "\377\321\325\315\377\320\325\314\377\317\324\312\377\316\323\311\377"
+ "\315\322\310\377\314\321\310\377\202\313\321\307\377\3\313\320\306\377"
+ "\313\321\307\377\307\315\303\377\206\305\313\300\377\1\271\277\265\377"
+ "\205oqm\377\1oqm=\352\377\377\377\0\12\214\216\212W\213\215\211\377\212"
+ "\214\210\377\211\213\207\377\207\211\205\377\206\210\204\377\335\340"
+ "\333\377\337\343\335\377\340\343\336\377\365\366\364\377\203\367\367"
+ "\366\377\1\367\370\366\377\202\367\370\367\377\202\370\370\367\377\3"
+ "\364\365\363\377\344\347\343\377\345\347\343\377\202\345\350\344\377"
+ "\6\346\350\345\377\346\351\345\377\347\351\345\377\347\351\346\377\350"
+ "\352\346\377\252\254\250\377\204oqm\377\1oqm\347\322\377\377\377\0\1"
+ "oqm\276\204oqm\377\1\211\214\206\377\203\305\313\300\377\10\312\317\305"
+ "\377\321\326\315\377\320\325\314\377\317\324\313\377\316\323\312\377"
+ "\315\322\311\377\315\322\310\377\314\321\310\377\202\314\321\307\377"
+ "\2\314\321\310\377\310\315\303\377\206\305\313\300\377\1\304\312\277"
+ "\377\205oqm\377\1oqmY\352\377\377\377\0\11\213\215\211d\212\214\210\377"
+ "\210\212\206\377\207\211\205\377\206\210\204\377\211\213\207\377\337"
+ "\343\335\377\340\343\336\377\341\343\337\377\203\366\367\366\377\202"
+ "\367\370\366\377\203\367\370\367\377\3\370\370\367\377\364\365\363\377"
+ "\345\347\343\377\202\345\350\344\377\7\346\350\345\377\346\351\345\377"
+ "\347\351\345\377\347\351\346\377\347\352\346\377\350\352\347\377\224"
+ "\226\223\377\204oqm\377\1oqm\270\322\377\377\377\0\1oqm\223\204oqm\377"
+ "\1z}x\377\203\305\313\300\377\7\312\317\305\377\322\326\316\377\321\325"
+ "\315\377\317\324\313\377\317\324\312\377\316\323\312\377\315\322\311"
+ "\377\204\315\322\310\377\1\310\315\303\377\207\305\313\300\377\1suq\377"
+ "\204oqm\377\1oqmd\352\377\377\377\0\6\211\213\207n\210\212\206\377\207"
+ "\211\205\377\206\210\204\377\205\207\203\377\213\215\211\377\202\340"
+ "\343\336\377\2\342\346\341\377\366\367\365\377\202\366\367\366\377\1"
+ "\367\367\366\377\202\367\370\366\377\203\367\370\367\377\1\364\365\363"
+ "\377\202\345\350\344\377\5\346\350\344\377\346\351\345\377\347\351\345"
+ "\377\347\351\346\377\347\352\346\377\202\350\352\347\377\1\177\201}\377"
+ "\204oqm\377\1oqm\213\322\377\377\377\0\1oqmh\205oqm\377\1\301\307\274"
+ "\377\202\305\313\300\377\10\312\317\305\377\322\327\316\377\321\326\315"
+ "\377\320\325\314\377\317\324\313\377\317\324\312\377\316\323\312\377"
+ "\315\323\311\377\202\315\322\311\377\2\315\323\311\377\310\316\303\377"
+ "\207\305\313\300\377\1wyt\377\204oqm\377\1oqmo\352\377\377\377\0\12\210"
+ "\212\206y\207\211\205\377\206\210\204\377\204\206\202\377\203\205\201"
+ "\377\217\221\215\377\340\343\336\377\340\344\337\377\345\350\343\377"
+ "\366\367\365\377\203\366\367\366\377\202\367\370\366\377\202\367\370"
+ "\367\377\10\370\370\367\377\364\365\363\377\345\350\344\377\346\350\344"
+ "\377\346\351\345\377\347\351\345\377\347\351\346\377\347\352\346\377"
+ "\202\350\352\347\377\1\343\345\342\377\205oqm\377\1oqm_\322\377\377\377"
+ "\0\1oqm<\205oqm\377\1\263\271\257\377\202\305\313\300\377\7\312\320\305"
+ "\377\322\327\317\377\322\326\316\377\321\325\315\377\320\325\314\377"
+ "\317\324\313\377\317\324\312\377\204\316\323\312\377\1\310\316\303\377"
+ "\207\305\313\300\377\1z}x\377\204oqm\377\1oqmy\352\377\377\377\0\11\207"
+ "\211\205\203\205\207\203\377\204\206\202\377\203\205\201\377\202\204"
+ "\200\377\222\224\220\377\340\343\336\377\341\344\337\377\347\351\345"
+ "\377\202\366\367\365\377\1\366\367\366\377\202\367\367\366\377\1\367"
+ "\370\366\377\203\367\370\367\377\6\364\365\363\377\346\350\344\377\346"
+ "\351\345\377\347\351\345\377\347\351\346\377\347\352\346\377\202\350"
+ "\352\347\377\2\351\353\347\377\316\320\315\377\205oqm\377\1oqm2\322\377"
+ "\377\377\0\1oqm\21\205oqm\377\1\245\251\241\377\202\305\313\300\377\4"
+ "\312\320\306\377\323\327\317\377\322\327\316\377\321\326\315\377\202"
+ "\320\325\314\377\203\317\324\313\377\3\317\324\312\377\317\324\313\377"
+ "\310\316\304\377\207\305\313\300\377\1\177\201|\377\204oqm\377\1oqm\204"
+ "\352\377\377\377\0\6\205\207\203\216\204\206\202\377\203\205\201\377"
+ "\202\204\200\377\200\202~\377\225\227\223\377\202\341\344\337\377\2\351"
+ "\354\350\377\366\367\365\377\203\366\367\366\377\2\367\367\366\377\367"
+ "\370\366\377\203\367\370\367\377\5\364\365\363\377\346\350\345\377\346"
+ "\351\345\377\347\351\346\377\347\352\346\377\202\350\352\347\377\3\350"
+ "\353\347\377\351\353\350\377\271\273\267\377\204oqm\377\2oqm\374oqm\10"
+ "\323\377\377\377\0\1oqm\346\204oqm\377\1\226\232\223\377\202\305\313"
+ "\300\377\5\312\320\306\377\324\330\320\377\323\327\317\377\322\326\316"
+ "\377\321\326\315\377\203\320\325\314\377\203\317\324\313\377\1\311\316"
+ "\304\377\207\305\313\300\377\1\203\205\200\377\204oqm\377\1oqm\216\352"
+ "\377\377\377\0\11\204\206\202\230\203\205\201\377\201\203\177\377\200"
+ "\202~\377\177\201}\377\231\233\227\377\341\344\337\377\341\344\340\377"
+ "\353\355\352\377\202\366\367\365\377\202\366\367\366\377\202\367\367"
+ "\366\377\1\367\370\366\377\202\367\370\367\377\4\364\365\363\377\346"
+ "\351\345\377\347\351\346\377\347\352\346\377\202\350\352\347\377\1\350"
+ "\353\347\377\202\351\353\350\377\1\243\245\241\377\204oqm\377\1oqm\330"
+ "\324\377\377\377\0\1oqm\273\204oqm\377\1\210\213\205\377\202\305\313"
+ "\300\377\7\312\320\306\377\324\330\320\377\323\330\317\377\322\327\317"
+ "\377\322\326\316\377\321\326\315\377\321\325\315\377\204\320\325\314"
+ "\377\1\311\317\304\377\207\305\313\300\377\1\206\211\203\377\204oqm\377"
+ "\1oqm\230\352\377\377\377\0\12\202\204\200\243\201\203\177\377\200\202"
+ "~\377\177\201}\377}\177{\377\234\236\232\377\341\344\340\377\342\345"
+ "\340\377\355\357\354\377\366\367\365\377\204\366\367\366\377\1\367\367"
+ "\366\377\202\367\370\366\377\2\367\370\367\377\364\365\363\377\202\347"
+ "\351\346\377\3\350\352\346\377\350\352\347\377\350\353\347\377\203\351"
+ "\353\350\377\1\227\231\225\377\204oqm\377\1oqm\256\324\377\377\377\0"
+ "\1oqm\223\204oqm\377\1\200\203~\377\202\305\313\300\377\6\313\320\306"
+ "\377\324\331\321\377\324\330\320\377\323\327\317\377\322\327\317\377"
+ "\322\326\316\377\205\321\326\315\377\1\311\317\305\377\207\305\313\300"
+ "\377\1\212\216\207\377\204oqm\377\1oqm\243\352\377\377\377\0\11\201\203"
+ "\177\250\200\202~\377~\200|\377}\177{\377|~z\377\236\240\234\377\342"
+ "\345\340\377\342\345\341\377\357\361\356\377\203\366\367\365\377\2\366"
+ "\367\366\377\367\367\366\377\202\367\370\366\377\202\367\370\367\377"
+ "\5\364\365\363\377\347\351\346\377\350\352\346\377\350\352\347\377\350"
+ "\353\347\377\204\351\353\350\377\1\221\223\217\377\204oqm\377\1oqm\235"
+ "\324\377\377\377\0\1oqm\204\204oqm\377\1|\177z\377\202\305\313\300\377"
+ "\7\313\320\306\377\325\331\322\377\324\331\321\377\324\330\320\377\323"
+ "\327\317\377\322\327\317\377\322\327\316\377\204\322\326\316\377\1\311"
+ "\317\305\377\207\305\313\300\377\1\214\220\211\377\204oqm\377\1oqm\250"
+ "\352\377\377\377\0\13\177\201}\250~\200|\377}\177{\377|~z\377{}y\377"
+ "\235\237\233\377\342\345\340\377\343\345\341\377\360\361\357\377\365"
+ "\366\365\377\366\367\365\377\204\366\367\366\377\1\367\367\366\377\202"
+ "\367\370\366\377\2\364\365\364\377\347\352\346\377\202\350\352\347\377"
+ "\204\351\353\350\377\2\350\353\347\377\213\215\211\377\204oqm\377\1o"
+ "qm\221\324\377\377\377\0\1oqmx\204oqm\377\1y{v\377\202\305\313\300\377"
+ "\7\313\320\307\377\326\332\322\377\325\331\321\377\324\331\321\377\324"
+ "\330\320\377\323\330\317\377\323\327\317\377\202\322\327\317\377\3\322"
+ "\327\316\377\322\327\317\377\312\317\305\377\207\305\313\300\377\1\214"
+ "\220\211\377\204oqm\377\1oqm\250\352\377\377\377\0\11~\200|\250}\177"
+ "{\377|~z\377z|x\377y{w\377\234\237\232\377\343\345\341\377\343\346\341"
+ "\377\360\361\357\377\203\366\367\365\377\202\366\367\366\377\1\367\367"
+ "\366\377\202\367\370\366\377\2\367\370\367\377\364\365\364\377\202\350"
+ "\352\347\377\202\351\353\350\377\5\352\354\351\377\351\353\350\377\351"
+ "\353\347\377\350\352\347\377\205\207\203\377\204oqm\377\1oqm\205\324"
+ "\377\377\377\0\1oqmm\204oqm\377\1uws\377\202\305\313\300\377\5\313\321"
+ "\307\377\326\332\323\377\326\332\322\377\325\331\321\377\324\331\321"
+ "\377\202\324\330\320\377\204\323\330\317\377\1\312\317\305\377\207\305"
+ "\313\300\377\1\214\220\211\377\204oqm\377\1oqm\250\352\377\377\377\0"
+ "\12}\177{\250{}y\377z|x\377y{w\377xzv\377\234\236\232\377\343\346\341"
+ "\377\343\346\342\377\360\361\357\377\365\366\365\377\202\366\367\365"
+ "\377\203\366\367\366\377\202\367\367\366\377\3\367\370\366\377\364\365"
+ "\364\377\350\352\347\377\205\351\353\350\377\3\350\352\347\377\350\352"
+ "\346\377\177\201}\377\204oqm\377\1oqmz\324\377\377\377\0\1oqma\204oq"
+ "m\377\1qso\377\202\305\313\300\377\5\313\321\307\377\327\333\324\377"
+ "\326\332\323\377\326\332\322\377\325\331\321\377\202\324\331\321\377"
+ "\204\324\330\320\377\1\312\320\306\377\207\305\313\300\377\1\214\220"
+ "\211\377\204oqm\377\1oqm\250\352\377\377\377\0\13{}y\250z|x\377y{w\377"
+ "xzv\377vxt\377\233\235\231\377\343\346\342\377\344\346\342\377\360\362"
+ "\357\377\365\366\365\377\366\366\365\377\202\366\367\365\377\1\366\367"
+ "\366\377\202\367\367\366\377\4\367\370\366\377\367\370\367\377\364\365"
+ "\364\377\351\353\347\377\204\351\353\350\377\4\350\352\347\377\350\352"
+ "\346\377\347\352\346\377y{w\377\204oqm\377\1oqmn\324\377\377\377\0\1"
+ "oqmU\205oqm\377\10\304\312\277\377\305\313\300\377\314\321\307\377\327"
+ "\334\324\377\327\333\323\377\326\332\323\377\326\332\322\377\325\331"
+ "\322\377\202\325\331\321\377\203\324\331\321\377\1\312\320\306\377\207"
+ "\305\313\300\377\1\214\220\211\377\204oqm\377\1oqm\250\352\377\377\377"
+ "\0\14z|x\250y{w\377wyu\377vxt\377uws\377\232\234\230\377\344\346\342"
+ "\377\344\347\343\377\360\361\357\377\365\366\365\377\365\367\365\377"
+ "\366\367\365\377\203\366\367\366\377\1\366\370\366\377\202\367\370\366"
+ "\377\1\365\366\364\377\204\351\353\350\377\202\350\352\347\377\3\347"
+ "\352\346\377\347\351\346\377tvr\377\204oqm\377\1oqmc\324\377\377\377"
+ "\0\1oqmJ\205oqm\377\7\301\306\274\377\305\313\300\377\314\321\307\377"
***The diff for this file has been truncated for email.***
=======================================
--- /dev/null
+++ /src/shacrypt.c Sat Feb 27 09:31:24 2010
@@ -0,0 +1,307 @@
+/**
+ * SHACrypt main code
+ *
+ * SHACrypt - Encrypt files using cryptographic hash functions
+ * Copyright (C) 2009 LlamaSlayers
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * 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, see <http://www.gnu.org/licenses/>.
+ *
+ * @since 1.1.2
+ * @version 1.2
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include "shacrypt.h"
+
+#include "third-party/sha1.h"
+#include "third-party/sha2.h"
+#include "third-party/md5.h"
+#include "third-party/cubehash.h"
+#include "third-party/nessie.h"
+
+#ifdef WINDOWS
+#include <windows.h>
+#include <wincrypt.h>
+#endif
+
+int SHACrypt_XOR( char* in1, char* in2, char* out, int len ) {
+ int i = 0;
+
+ for ( i = 0; i < len; i++ ) {
+ out[i] = (char)(in1[i] ^ in2[i]);
+ }
+
+ return 0;
+}
+
+int SHACrypt_GenKey( char* oldkey, char* newkey, char* password ) {
+ int status = 0;
+ SHA1Context sha;
+
+ status = SHA1Reset( &sha );
+ if ( status )
+ return status;
+
+ status = SHA1Input( &sha, (unsigned char*)oldkey, sizeof( oldkey ) );
+ if ( status )
+ return status;
+
+ status = SHA1Input( &sha, (unsigned char*)password, sizeof( password )
);
+ if ( status )
+ return status;
+
+ status = SHA1Result( &sha, (unsigned char*)newkey );
+
+ return status;
+}
+
+int SHACrypt_GenRand( char* data, int len ) {
+ FILE* rnd = fopen( "/dev/urandom", "rb" );
+ int i;
+
+#ifdef WINDOWS
+ HCRYPTPROV hCryptProv;
+ BYTE pbData[len];
+
+ if ( CryptAcquireContext( &hCryptProv, NULL, NULL, PROV_RSA_FULL, 0 )
) {
+ if ( CryptGenRandom( hCryptProv, (DWORD)len, pbData ) ) {
+ for ( i = 0; i < len; i++ ) {
+ data[i] = (char)pbData[i];
+ }
+ return 0;
+ }
+ CryptReleaseContext( hCryptProv, 0 );
+ }
+#endif
+
+ if ( rnd ) {
+ fread( data, 1, len, rnd );
+ fclose( rnd );
+ return 0;
+ }
+ free( rnd );
+
+ srand( time( NULL ) );
+ for ( i = 0; i < 50; i++ ) { // Pseudo-entropy
+ srand( rand() );
+ }
+
+ for ( i = 0; i < len; i++ ) {
+ data[i] = (char)(rand() % 256);
+ }
+
+ return 1;
+}
+
+int SHACrypt_GetLength( unsigned char algos ) {
+ if ( algos & '\xD0' )
+ return 64;
+ if ( algos & '\x08' )
+ return 48;
+ if ( algos & '\x04' )
+ return 32;
+ if ( algos & '\x02' )
+ return 28;
+ if ( algos & '\x01' )
+ return 20;
+ if ( algos & '\x20' )
+ return 16;
+ return 0;
+}
+
+int SHACrypt_GetRand( unsigned char algos, char* rand ) {
+ int len = SHACrypt_GetLength( algos );
+ return SHACrypt_GenRand( rand, len ) ? -len : len;
+}
+
+void SHACrypt_Init( struct SHACrypt_Context* ctx, unsigned char* password,
unsigned int passlen,
+ unsigned char algos, unsigned char* rand, unsigned
char randlen ) {
+ ctx->algos = algos;
+ ctx->password = password;
+ ctx->passlen = passlen;
+
+ if ( algos & '\x01' ) {
+ ctx->sha1_ptr = 0;
+ SHA1Reset( &ctx->sha1 );
+ SHA1Input( &ctx->sha1, rand, randlen );
+ SHA1Input( &ctx->sha1, password, passlen );
+ SHA1Result( &ctx->sha1, ctx->sha1_res );
+ }
+
+ if ( algos & '\x02' ) {
+ ctx->sha224_ptr = 0;
+ sha224_init( &ctx->sha224 );
+ sha224_update( &ctx->sha224, rand, randlen );
+ sha224_update( &ctx->sha224, password, passlen );
+ sha224_final( &ctx->sha224, ctx->sha224_res );
+ }
+
+ if ( algos & '\x04' ) {
+ ctx->sha256_ptr = 0;
+ sha256_init( &ctx->sha256 );
+ sha256_update( &ctx->sha256, rand, randlen );
+ sha256_update( &ctx->sha256, password, passlen );
+ sha256_final( &ctx->sha256, ctx->sha256_res );
+ }
+
+ if ( algos & '\x08' ) {
+ ctx->sha384_ptr = 0;
+ sha384_init( &ctx->sha384 );
+ sha384_update( &ctx->sha384, rand, randlen );
+ sha384_update( &ctx->sha384, password, passlen );
+ sha384_final( &ctx->sha384, ctx->sha384_res );
+ }
+
+ if ( algos & '\x10' ) {
+ ctx->sha512_ptr = 0;
+ sha512_init( &ctx->sha512 );
+ sha512_update( &ctx->sha512, rand, randlen );
+ sha512_update( &ctx->sha512, password, passlen );
+ sha512_final( &ctx->sha512, ctx->sha512_res );
+ }
+
+ if ( algos & '\x20' ) {
+ ctx->md5_ptr = 0;
+ MD5Init( &ctx->md5 );
+ MD5Update( &ctx->md5, rand, randlen );
+ MD5Update( &ctx->md5, password, passlen );
+ MD5Final( ctx->md5_res, &ctx->md5 );
+ }
+
+ if ( algos & '\x40' ) {
+ ctx->cube_ptr = 0;
+ CubeHash_Init( &ctx->cube, 512 );
+ CubeHash_Update( &ctx->cube, rand, randlen * 8 );
+ CubeHash_Update( &ctx->cube, password, passlen * 8 );
+ CubeHash_Final( &ctx->cube, ctx->cube_res );
+ }
+
+ if ( algos & '\x80' ) {
+ ctx->whirlpool_ptr = 0;
+ NESSIEinit( &ctx->whirlpool );
+ NESSIEadd( rand, randlen * 8, &ctx->whirlpool );
+ NESSIEadd( password, passlen * 8, &ctx->whirlpool );
+ NESSIEfinalize( &ctx->whirlpool, ctx->whirlpool_res );
+ }
+}
+
+void SHACrypt_Process( SHACrypt_Context* ctx, char* in, char* out,
unsigned int len ) {
+ int i;
+ char c;
+
+ for ( i = 0; i < len; i++ ) {
+ c = in[i];
+
+ if ( ctx->algos & '\x01' ) {
+ if ( ctx->sha1_ptr > 19 ) {
+ ctx->sha1_ptr = 0;
+ SHA1Reset( &ctx->sha1 );
+ SHA1Input( &ctx->sha1, ctx->sha1_res, 20 );
+ SHA1Input( &ctx->sha1, ctx->password, ctx->passlen );
+ SHA1Result( &ctx->sha1, ctx->sha1_res );
+ }
+ c ^= ctx->sha1_res[ctx->sha1_ptr];
+ ctx->sha1_ptr++;
+ }
+
+ if ( ctx->algos & '\x02' ) {
+ if ( ctx->sha224_ptr > 27 ) {
+ ctx->sha224_ptr = 0;
+ sha224_init( &ctx->sha224 );
+ sha224_update( &ctx->sha224, ctx->sha224_res, 28 );
+ sha224_update( &ctx->sha224, ctx->password, ctx->passlen );
+ sha224_final( &ctx->sha224, ctx->sha224_res );
+ }
+ c ^= ctx->sha224_res[ctx->sha224_ptr];
+ ctx->sha224_ptr++;
+ }
+
+ if ( ctx->algos & '\x04' ) {
+ if ( ctx->sha256_ptr > 31 ) {
+ ctx->sha256_ptr = 0;
+ sha256_init( &ctx->sha256 );
+ sha256_update( &ctx->sha256, ctx->sha256_res, 32 );
+ sha256_update( &ctx->sha256, ctx->password, ctx->passlen );
+ sha256_final( &ctx->sha256, ctx->sha256_res );
+ }
+ c ^= ctx->sha256_res[ctx->sha256_ptr];
+ ctx->sha256_ptr++;
+ }
+
+ if ( ctx->algos & '\x08' ) {
+ if ( ctx->sha384_ptr > 47 ) {
+ ctx->sha384_ptr = 0;
+ sha384_init( &ctx->sha384 );
+ sha384_update( &ctx->sha384, ctx->sha384_res, 48 );
+ sha384_update( &ctx->sha384, ctx->password, ctx->passlen );
+ sha384_final( &ctx->sha384, ctx->sha384_res );
+ }
+ c ^= ctx->sha384_res[ctx->sha384_ptr];
+ ctx->sha384_ptr++;
+ }
+
+ if ( ctx->algos & '\x10' ) {
+ if ( ctx->sha512_ptr > 63 ) {
+ ctx->sha512_ptr = 0;
+ sha512_init( &ctx->sha512 );
+ sha512_update( &ctx->sha512, ctx->sha512_res, 64 );
+ sha512_update( &ctx->sha512, ctx->password, ctx->passlen );
+ sha512_final( &ctx->sha512, ctx->sha512_res );
+ }
+ c ^= ctx->sha512_res[ctx->sha512_ptr];
+ ctx->sha512_ptr++;
+ }
+
+ if ( ctx->algos & '\x20' ) {
+ if ( ctx->md5_ptr > 15 ) {
+ ctx->md5_ptr = 0;
+ MD5Init( &ctx->md5 );
+ MD5Update( &ctx->md5, ctx->md5_res, 16 );
+ MD5Update( &ctx->md5, ctx->password, ctx->passlen );
+ MD5Final( ctx->md5_res, &ctx->md5 );
+ }
+ c ^= ctx->md5_res[ctx->md5_ptr];
+ ctx->md5_ptr++;
+ }
+
+ if ( ctx->algos & '\x40' ) {
+ if ( ctx->cube_ptr > 63 ) {
+ ctx->cube_ptr = 0;
+ CubeHash_Init( &ctx->cube, 512 );
+ CubeHash_Update( &ctx->cube, ctx->cube_res, 512 );
+ CubeHash_Update( &ctx->cube, ctx->password, ctx->passlen *
8 );
+ CubeHash_Final( &ctx->cube, ctx->cube_res );
+ }
+ c ^= ctx->cube_res[ctx->cube_ptr];
+ ctx->cube_ptr++;
+ }
+
+ if ( ctx->algos & '\x80' ) {
+ if ( ctx->whirlpool_ptr > 63 ) {
+ ctx->whirlpool_ptr = 0;
+ NESSIEinit( &ctx->whirlpool );
+ NESSIEadd( ctx->whirlpool_res, 512, &ctx->whirlpool );
+ NESSIEadd( ctx->password, ctx->passlen * 8,
&ctx->whirlpool );
+ NESSIEfinalize( &ctx->whirlpool, ctx->whirlpool_res );
+ }
+ c ^= ctx->whirlpool_res[ctx->whirlpool_ptr];
+ ctx->whirlpool_ptr++;
+ }
+
+ out[i] = c;
+ }
+}
=======================================
--- /dev/null
+++ /src/shacrypt.glade Sat Feb 27 09:31:24 2010
@@ -0,0 +1,1284 @@
+<?xml version="1.0"?>
+<interface>
+ <requires lib="gtk+" version="2.16"/>
+ <!-- interface-naming-policy project-wide -->
+ <object class="GtkDialog" id="main">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">SHACrypt</property>
+ <property name="resizable">False</property>
+ <property name="type_hint">dialog</property>
+ <property name="has_separator">False</property>
+ <signal name="destroy" handler="gtk_main_quit"/>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox1">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkLabel" id="label_welcome">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Welcome to
+SHACrypt @VERSION@</property>
+ <property name="justify">center</property>
+ <attributes>
+ <attribute name="size" value="25000"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_select_an_action">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Please select an
action.</property>
+ <attributes>
+ <attribute name="size" value="15000"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area1">
+ <property name="visible">True</property>
+ <property name="homogeneous">True</property>
+ <property name="layout_style">center</property>
+ <child>
+ <object class="GtkButton" id="button_encrypt">
+ <property name="label"
translatable="yes">_Encrypt</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ <accelerator key="e" signal="clicked"/>
+ <signal name="clicked" handler="button_pressed_encrypt"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_decrypt">
+ <property name="label"
translatable="yes">_Decrypt</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ <accelerator key="d" signal="clicked"/>
+ <signal name="clicked" handler="button_pressed_decrypt"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_asymmetric">
+ <property name="label"
translatable="yes">_Asymmetric</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ <accelerator key="a" signal="clicked"/>
+ <signal name="clicked"
handler="button_pressed_asymmetric"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="0">button_encrypt</action-widget>
+ <action-widget response="0">button_decrypt</action-widget>
+ <action-widget response="0">button_asymmetric</action-widget>
+ </action-widgets>
+ </object>
+ <object class="GtkDialog" id="encrypt_step1">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Encrypt a file (Step 1 of
3)</property>
+ <property name="modal">True</property>
+ <property name="window_position">center-on-parent</property>
+ <property name="default_width">500</property>
+ <property name="default_height">400</property>
+ <property name="type_hint">dialog</property>
+ <property name="transient_for">main</property>
+ <property name="has_separator">False</property>
+ <signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox4">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkFileChooserWidget" id="file_e1_select">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="preview_widget_active">False</property>
+ <signal name="file_activated" handler="encrypt_step1_ok"/>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_e1_description">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Select a file to
encrypt.</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="padding">15</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area4">
+ <property name="visible">True</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="button_e1_cancel">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="encrypt_step1_cancel"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_e1_ok">
+ <property name="label">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="encrypt_step1_ok"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="0">button_e1_cancel</action-widget>
+ <action-widget response="0">button_e1_ok</action-widget>
+ </action-widgets>
+ </object>
+ <object class="GtkDialog" id="encrypt_step2">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Encrypt a file (Step 2 of
3)</property>
+ <property name="modal">True</property>
+ <property name="window_position">center-on-parent</property>
+ <property name="type_hint">dialog</property>
+ <property name="transient_for">encrypt_step1</property>
+ <property name="has_separator">False</property>
+ <signal name="delete_event" handler="encrypt_step2_cancel"/>
+ <signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox3">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkNotebook" id="notebook_e2_tabs">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <object class="GtkVBox" id="vbox3">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkTable" id="table1">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <child>
+ <object class="GtkEntry" id="field_e2_password1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="visibility">False</property>
+ <property name="invisible_char">●</property>
+ <property name="activates_default">True</property>
+ <property name="invisible_char_set">True</property>
+ <signal name="changed"
handler="encrypt_step2_passchange"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_e2_password2">
+ <property name="visible">True</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
+ <property name="label"
translatable="yes">(again)</property>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options">GTK_SHRINK</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="field_e2_password2">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="visibility">False</property>
+ <property name="invisible_char">●</property>
+ <property name="invisible_char_set">True</property>
+ <signal name="changed"
handler="encrypt_step2_passchange"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_e2_password1">
+ <property name="visible">True</property>
+ <property name="xpad">5</property>
+ <property name="ypad">5</property>
+ <property name="label"
translatable="yes">Password</property>
+ </object>
+ <packing>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="padding">2</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkProgressBar"
id="progressbar_e2_pass_strength">
+ <property name="visible">True</property>
+ <property name="show_text">True</property>
+ <property name="text" translatable="yes">Enter a
password</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label_e2_basic">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Basic</property>
+ </object>
+ <packing>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="vbox4">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkFrame" id="frame_e2_hashalgo">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkTable" id="table2">
+ <property name="visible">True</property>
+ <property name="n_rows">4</property>
+ <property name="n_columns">2</property>
+ <child>
+ <object class="GtkCheckButton"
id="check_e2_sha1">
+ <property name="label"
translatable="yes">SHA1</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property
name="receives_default">False</property>
+ <property name="active">True</property>
+ <property
name="draw_indicator">True</property>
+ <signal name="toggled"
handler="encrypt_step2_check_hashalgo"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkCheckButton"
id="check_e2_sha224">
+ <property name="label"
translatable="yes">SHA224</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property
name="receives_default">False</property>
+ <property
name="draw_indicator">True</property>
+ <signal name="toggled"
handler="encrypt_step2_check_hashalgo"/>
+ </object>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton"
id="check_e2_sha256">
+ <property name="label"
translatable="yes">SHA256</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property
name="receives_default">False</property>
+ <property
name="draw_indicator">True</property>
+ <signal name="toggled"
handler="encrypt_step2_check_hashalgo"/>
+ </object>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton"
id="check_e2_sha384">
+ <property name="label"
translatable="yes">SHA384</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property
name="receives_default">False</property>
+ <property
name="draw_indicator">True</property>
+ <signal name="toggled"
handler="encrypt_step2_check_hashalgo"/>
+ </object>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton"
id="check_e2_sha512">
+ <property name="label"
translatable="yes">SHA512</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property
name="receives_default">False</property>
+ <property
name="draw_indicator">True</property>
+ <signal name="toggled"
handler="encrypt_step2_check_hashalgo"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton"
id="check_e2_md5">
+ <property name="label"
translatable="yes">MD5</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property
name="receives_default">False</property>
+ <property
name="draw_indicator">True</property>
+ <signal name="toggled"
handler="encrypt_step2_check_hashalgo"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton"
id="check_e2_cubehash">
+ <property name="label"
translatable="yes">CubeHash</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property
name="receives_default">False</property>
+ <property
name="draw_indicator">True</property>
+ <signal name="toggled"
handler="encrypt_step2_check_hashalgo"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton"
id="check_e2_whirlpool">
+ <property name="label"
translatable="yes">WHIRLPOOL</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property
name="receives_default">False</property>
+ <property
name="draw_indicator">True</property>
+ <signal name="toggled"
handler="encrypt_step2_check_hashalgo"/>
+ </object>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label_e2_hashalgo">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Hash
Algorithms</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame_e2_randomseed">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment2">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkVBox" id="vbox5">
+ <property name="visible">True</property>
+ <property
name="orientation">vertical</property>
+ <child>
+ <object class="GtkRadioButton"
id="radio_e2_randomseed_off">
+ <property name="label"
translatable="yes">Select one based on my other choices</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property
name="receives_default">False</property>
+ <property
name="draw_indicator">True</property>
+ <signal name="toggled"
handler="encrypt_step2_check_hashalgo"/>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkRadioButton"
id="radio_e2_randomseed_on">
+ <property name="label"
translatable="yes">Use this number of bytes:</property>
+ <property
name="visible">True</property>
+ <property
name="can_focus">True</property>
+ <property
name="receives_default">False</property>
+ <property
name="draw_indicator">True</property>
+ <property
name="group">radio_e2_randomseed_off</property>
+ <signal name="toggled"
handler="encrypt_step2_check_hashalgo"/>
+ </object>
+ <packing>
+ <property
name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHScale"
id="hscale_e2_randomseed">
+ <property
name="visible">True</property>
+ <property
name="can_focus">True</property>
+ <property
name="adjustment">adjustment_e2_randomseed</property>
+ <property name="digits">0</property>
+ <property
name="value_pos">left</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label_e2_randomseed">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Random
Seed Length</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label_e2_advanced">
+ <property name="visible">True</property>
+ <property name="label"
translatable="yes">Advanced</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area3">
+ <property name="visible">True</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="button_e2_cancel">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="encrypt_step2_cancel"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_e2_ok">
+ <property name="label">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ <accelerator key="Return" signal="clicked"/>
+ <signal name="clicked" handler="encrypt_step2_ok"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="0">button_e2_cancel</action-widget>
+ <action-widget response="0">button_e2_ok</action-widget>
+ </action-widgets>
+ </object>
+ <object class="GtkWindow" id="encrypt_step3">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Encrypt a file (Step 3 of
3)</property>
+ <property name="modal">True</property>
+ <property name="window_position">center-on-parent</property>
+ <property name="type_hint">dialog</property>
+ <property name="deletable">False</property>
+ <property name="transient_for">encrypt_step2</property>
+ <signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
+ <child>
+ <object class="GtkVBox" id="vbox2">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">5</property>
+ <child>
+ <object class="GtkProgressBar" id="progressbar_e3_progress">
+ <property name="visible">True</property>
+ <property name="show_text">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_e3_description">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Your file is now
being encrypted using the password you specified. A copy has been created,
so the original file will not be modified.</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkAdjustment" id="adjustment_e2_randomseed">
+ <property name="value">20</property>
+ <property name="lower">1</property>
+ <property name="upper">256</property>
+ <property name="step_increment">1</property>
+ </object>
+ <object class="GtkDialog" id="decrypt_step1">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Decrypt a file (Step 1 of
3)</property>
+ <property name="window_position">center-on-parent</property>
+ <property name="default_width">500</property>
+ <property name="default_height">400</property>
+ <property name="type_hint">dialog</property>
+ <property name="transient_for">main</property>
+ <signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox5">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkFileChooserWidget" id="file_d1_select">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="preview_widget_active">False</property>
+ <property name="filter">filter_shacrypt_ext</property>
+ <property name="use_preview_label">False</property>
+ <signal name="file_activated" handler="decrypt_step1_ok"/>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_d1_desc">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Select a file to
decrypt.</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="padding">5</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area5">
+ <property name="visible">True</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="button_d1_cancel">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="decrypt_step1_cancel"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_d1_ok">
+ <property name="label">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="decrypt_step1_ok"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="0">button_d1_cancel</action-widget>
+ <action-widget response="0">button_d1_ok</action-widget>
+ </action-widgets>
+ </object>
+ <object class="GtkFileFilter" id="filter_shacrypt_ext"/>
+ <object class="GtkMessageDialog" id="decrypt_step1_error_notshacrypt">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Error reading file</property>
+ <property name="resizable">False</property>
+ <property name="modal">True</property>
+ <property name="window_position">center-on-parent</property>
+ <property name="type_hint">notification</property>
+ <property name="skip_taskbar_hint">True</property>
+ <property name="transient_for">decrypt_step1</property>
+ <property name="message_type">error</property>
+ <property name="text" translatable="yes">File could not be
read</property>
+ <property name="secondary_text" translatable="yes">The file you
selected was not a valid SHACrypt file.
+It might be corrupted or from a newer version.</property>
+ <signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox6">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area6">
+ <property name="visible">True</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="button_d1b_ok">
+ <property name="label">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="decrypt_step1_error_ok"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="0">button_d1b_ok</action-widget>
+ </action-widgets>
+ </object>
+ <object class="GtkDialog" id="decrypt_step2">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Decrypt a file (Step 2 of
3)</property>
+ <property name="modal">True</property>
+ <property name="window_position">center-on-parent</property>
+ <property name="type_hint">dialog</property>
+ <property name="transient_for">decrypt_step1</property>
+ <property name="has_separator">False</property>
+ <signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
+ <signal name="delete_event" handler="decrypt_step2_cancel"/>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox8">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkNotebook" id="notebook_d2_tabs">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <object class="GtkHBox" id="hbox2">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel" id="label_d2_password">
+ <property name="visible">True</property>
+ <property name="label"
translatable="yes">Password</property>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="field_d2_password">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="visibility">False</property>
+ <property name="invisible_char">●</property>
+ <property name="activates_default">True</property>
+ <property name="invisible_char_set">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel" id="label_d2_basic">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Basic</property>
+ </object>
+ <packing>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area8">
+ <property name="visible">True</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="button_d2_cancel">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="decrypt_step2_cancel"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="button_d2_ok">
+ <property name="label">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="decrypt_step2_ok"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="0">button_d2_cancel</action-widget>
+ <action-widget response="0">button_d2_ok</action-widget>
+ </action-widgets>
+ </object>
+ <object class="GtkWindow" id="decrypt_step3">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Decrypt a file (Step 3 of
3)</property>
+ <property name="modal">True</property>
+ <property name="window_position">center-on-parent</property>
+ <property name="type_hint">dialog</property>
+ <property name="deletable">False</property>
+ <property name="transient_for">decrypt_step2</property>
+ <signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
+ <child>
+ <object class="GtkVBox" id="vbox6">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">5</property>
+ <child>
+ <object class="GtkProgressBar" id="progressbar_d3_progress">
+ <property name="visible">True</property>
+ <property name="show_text">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label_d3_description">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Your file is now
being decrypted using the password you specified. If the password was
incorrect, the decrypted file will contain seemingly random data. The
encrypted file will not be modified.</property>
+ <property name="justify">center</property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <object class="GtkDialog" id="asymmetric_step1">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Asymmetric Encryption (Step
1 of 3)</property>
+ <property name="modal">True</property>
+ <property name="window_position">center-on-parent</property>
+ <property name="type_hint">dialog</property>
+ <property name="transient_for">main</property>
+ <property name="has_separator">False</property>
+ <signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
+ <child internal-child="vbox">
+ <object class="GtkVBox" id="dialog-vbox9">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child>
+ <object class="GtkFileChooserWidget" id="file_a1_select">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="preview_widget_active">False</property>
+ <property name="filter">filter_shacrypt_ext</property>
+ <property name="use_preview_label">False</property>
+ <signal name="file_activated" handler="asymmetric_step1_ok"/>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <object class="GtkHButtonBox" id="dialog-action_area9">
+ <property name="visible">True</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton" id="button_a1_cancel">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ <signal name="clicked" handler="asymmetric_step1_cancel"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
***The diff for this file has been truncated for email.***
=======================================
--- /dev/null
+++ /src/shacrypt.h Sat Feb 27 09:31:24 2010
@@ -0,0 +1,80 @@
+/**
+ * SHACrypt header
+ *
+ * SHACrypt - Encrypt files using cryptographic hash functions
+ * Copyright (C) 2009 LlamaSlayers
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * 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, see <http://www.gnu.org/licenses/>.
+ *
+ * @since 1.1.2
+ * @version 1.2
+ */
+
+#ifndef _SHACRYPT_H_
+#define _SHACRYPT_H_
+// Legacy methods
+int SHACrypt_XOR( char* in1, char* in2, char* out, int len );
+int SHACrypt_GenKey( char* oldkey, char* newkey, char* password );
+int SHACrypt_GenRand( char* data, int len );
+
+// Methods added in the MultiHash branch
+#include "third-party/sha1.h"
+#include "third-party/sha2.h"
+#include "third-party/md5.h"
+#include "third-party/cubehash.h"
+#include "third-party/nessie.h"
+
+typedef struct SHACrypt_Context {
+ // Hash contexts
+ SHA1Context sha1;
+ sha224_ctx sha224;
+ sha256_ctx sha256;
+ sha384_ctx sha384;
+ sha512_ctx sha512;
+ MD5_CTX md5;
+ CubeHash_hashState cube;
+ NESSIEstruct whirlpool;
+
+ // Hash results
+ unsigned char sha1_res[20],
+ sha224_res[28],
+ sha256_res[32],
+ sha384_res[48],
+ sha512_res[64],
+ md5_res[16],
+ cube_res[64],
+ whirlpool_res[64];
+
+ // Hash result pointers
+ unsigned char sha1_ptr,
+ sha224_ptr,
+ sha256_ptr,
+ sha384_ptr,
+ sha512_ptr,
+ md5_ptr,
+ cube_ptr,
+ whirlpool_ptr;
+
+ // Other variables
+ unsigned char algos;
+ unsigned char* password;
+ unsigned int passlen;
+} SHACrypt_Context;
+
+int SHACrypt_GetLength( unsigned char algos );
+int SHACrypt_GetRand( unsigned char algos, char* rand );
+void SHACrypt_Init( SHACrypt_Context* ctx, unsigned char* password,
unsigned int passlen,
+ unsigned char algos, unsigned char* rand, unsigned
char randlen );
+void SHACrypt_Process( SHACrypt_Context* ctx, char* in, char* out,
unsigned int len );
+#endif
=======================================
--- /dev/null
+++ /src/third-party/cubehash.c Sat Feb 27 09:31:24 2010
@@ -0,0 +1,107 @@
+/* Downloaded from http://cubehash.cr.yp.to/
+ *
+ * Changes by Nightgunner5:
+ * Added CubeHash_ prefix
+ * Converted to stdint.h
+ */
+
+#define CUBEHASH_ROUNDS 8
+#define CUBEHASH_BLOCKBYTES 1
+
+#include <stdint.h>
+#include "cubehash.h"
+
+#define ROTATE(a,b) (((a) << (b)) | ((a) >> (32 - b)))
+
+static void CubeHash_transform(CubeHash_hashState *state)
+{
+ int i;
+ int r;
+ uint32_t y[16];
+
+ for (r = 0;r < CUBEHASH_ROUNDS;++r) {
+ for (i = 0;i < 16;++i) state->x[i + 16] += state->x[i];
+ for (i = 0;i < 16;++i) y[i ^ 8] = state->x[i];
+ for (i = 0;i < 16;++i) state->x[i] = ROTATE(y[i],7);
+ for (i = 0;i < 16;++i) state->x[i] ^= state->x[i + 16];
+ for (i = 0;i < 16;++i) y[i ^ 2] = state->x[i + 16];
+ for (i = 0;i < 16;++i) state->x[i + 16] = y[i];
+ for (i = 0;i < 16;++i) state->x[i + 16] += state->x[i];
+ for (i = 0;i < 16;++i) y[i ^ 4] = state->x[i];
+ for (i = 0;i < 16;++i) state->x[i] = ROTATE(y[i],11);
+ for (i = 0;i < 16;++i) state->x[i] ^= state->x[i + 16];
+ for (i = 0;i < 16;++i) y[i ^ 1] = state->x[i + 16];
+ for (i = 0;i < 16;++i) state->x[i + 16] = y[i];
+ }
+}
+
+CubeHash_HashReturn CubeHash_Init(CubeHash_hashState *state, int
hashbitlen)
+{
+ int i;
+
+ if (hashbitlen < 8) return BAD_HASHBITLEN;
+ if (hashbitlen > 512) return BAD_HASHBITLEN;
+ if (hashbitlen != 8 * (hashbitlen / 8)) return BAD_HASHBITLEN;
+
+ state->hashbitlen = hashbitlen;
+ for (i = 0;i < 32;++i) state->x[i] = 0;
+ state->x[0] = hashbitlen / 8;
+ state->x[1] = CUBEHASH_BLOCKBYTES;
+ state->x[2] = CUBEHASH_ROUNDS;
+ for (i = 0;i < 10;++i) CubeHash_transform(state);
+ state->pos = 0;
+ return SUCCESS;
+}
+
+CubeHash_HashReturn CubeHash_Update(CubeHash_hashState *state,
+ const CubeHash_BitSequence *data,
+ CubeHash_DataLength databitlen)
+{
+ /* caller promises us that previous data had integral number of bytes */
+ /* so state->pos is a multiple of 8 */
+
+ while (databitlen >= 8) {
+ uint32_t u = *data;
+ u <<= 8 * ((state->pos / 8) % 4);
+ state->x[state->pos / 32] ^= u;
+ data += 1;
+ databitlen -= 8;
+ state->pos += 8;
+ if (state->pos == 8 * CUBEHASH_BLOCKBYTES) {
+ CubeHash_transform(state);
+ state->pos = 0;
+ }
+ }
+ if (databitlen > 0) {
+ uint32_t u = *data;
+ u <<= 8 * ((state->pos / 8) % 4);
+ state->x[state->pos / 32] ^= u;
+ state->pos += databitlen;
+ }
+ return SUCCESS;
+}
+
+CubeHash_HashReturn CubeHash_Final(CubeHash_hashState *state,
CubeHash_BitSequence *hashval)
+{
+ int i;
+ uint32_t u;
+
+ u = (128 >> (state->pos % 8));
+ u <<= 8 * ((state->pos / 8) % 4);
+ state->x[state->pos / 32] ^= u;
+ CubeHash_transform(state);
+ state->x[31] ^= 1;
+ for (i = 0;i < 10;++i) CubeHash_transform(state);
+ for (i = 0;i < state->hashbitlen / 8;++i) hashval[i] = state->x[i / 4]
>> (8 * (i % 4));
+
+ return SUCCESS;
+}
+
+CubeHash_HashReturn CubeHash_Hash(int hashbitlen, const
CubeHash_BitSequence *data,
+ CubeHash_DataLength databitlen, CubeHash_BitSequence
*hashval)
+{
+ CubeHash_hashState state;
+ if (CubeHash_Init(&state,hashbitlen) != SUCCESS) return BAD_HASHBITLEN;
+ CubeHash_Update(&state,data,databitlen);
+ return CubeHash_Final(&state,hashval);
+}
=======================================
--- /dev/null
+++ /src/third-party/cubehash.h Sat Feb 27 09:31:24 2010
@@ -0,0 +1,31 @@
+/* Downloaded from http://cubehash.cr.yp.to/
+ *
+ * Changes by Nightgunner5:
+ * Added CubeHash_ prefix
+ */
+
+#ifndef cubehash_h
+#define cubehash_h
+#include <stdint.h>
+
+typedef unsigned char CubeHash_BitSequence;
+typedef unsigned long long CubeHash_DataLength;
+typedef enum { SUCCESS = 0, FAIL = 1, BAD_HASHBITLEN = 2 }
CubeHash_HashReturn;
+
+typedef struct {
+ int hashbitlen;
+ int pos; /* number of bits read into x from current block */
+ uint32_t x[32];
+} CubeHash_hashState;
+
+CubeHash_HashReturn CubeHash_Init(CubeHash_hashState *state, int
hashbitlen);
+
+CubeHash_HashReturn CubeHash_Update(CubeHash_hashState *state, const
CubeHash_BitSequence *data,
+ CubeHash_DataLength databitlen);
+
+CubeHash_HashReturn CubeHash_Final(CubeHash_hashState *state,
CubeHash_BitSequence *hashval);
+
+CubeHash_HashReturn CubeHash_Hash(int hashbitlen, const
CubeHash_BitSequence *data,
+ CubeHash_DataLength databitlen, CubeHash_BitSequence
*hashval);
+
+#endif
=======================================
--- /dev/null
+++ /src/third-party/md5.h Sat Feb 27 09:31:24 2010
@@ -0,0 +1,40 @@
+/* MD5.H - header file for MD5C.C
+ */
+
+/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
+rights reserved.
+
+License to copy and use this software is granted provided that it
+is identified as the "RSA Data Security, Inc. MD5 Message-Digest
+Algorithm" in all material mentioning or referencing this software
+or this function.
+
+License is also granted to make and use derivative works provided
+that such works are identified as "derived from the RSA Data
+Security, Inc. MD5 Message-Digest Algorithm" in all material
+mentioning or referencing the derived work.
+
+RSA Data Security, Inc. makes no representations concerning either
+the merchantability of this software or the suitability of this
+software for any particular purpose. It is provided "as is"
+without express or implied warranty of any kind.
+
+These notices must be retained in any copies of any part of this
+documentation and/or software.
+ */
+
+#ifndef _MD5_H_
+#define _MD5_H_
+
+/* MD5 context. */
+typedef struct {
+ unsigned long state[4]; /* state (ABCD) */
+ unsigned long count[2]; /* number of bits, modulo 2^64 (lsb first) */
+ unsigned char buffer[64]; /* input buffer */
+} MD5_CTX;
+
+void MD5Init (MD5_CTX *);
+void MD5Update (MD5_CTX *, unsigned char *, unsigned int);
+void MD5Final (unsigned char [16], MD5_CTX *);
+
+#endif
=======================================
--- /dev/null
+++ /src/third-party/md5c.c Sat Feb 27 09:31:24 2010
@@ -0,0 +1,336 @@
+/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
+ */
+
+/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
+rights reserved.
+
+License to copy and use this software is granted provided that it
+is identified as the "RSA Data Security, Inc. MD5 Message-Digest
+Algorithm" in all material mentioning or referencing this software
+or this function.
+
+License is also granted to make and use derivative works provided
+that such works are identified as "derived from the RSA Data
+Security, Inc. MD5 Message-Digest Algorithm" in all material
+mentioning or referencing the derived work.
+
+RSA Data Security, Inc. makes no representations concerning either
+the merchantability of this software or the suitability of this
+software for any particular purpose. It is provided "as is"
+without express or implied warranty of any kind.
+
+These notices must be retained in any copies of any part of this
+documentation and/or software.
+ */
+
+#include "md5global.h"
+#include "md5.h"
+
+/* Constants for MD5Transform routine.
+ */
+
+
+#define S11 7
+#define S12 12
+#define S13 17
+#define S14 22
+#define S21 5
+#define S22 9
+#define S23 14
+#define S24 20
+#define S31 4
+#define S32 11
+#define S33 16
+#define S34 23
+#define S41 6
+#define S42 10
+#define S43 15
+#define S44 21
+
+static void MD5Transform PROTO_LIST ((UINT4 [4], unsigned char [64]));
+static void Encode PROTO_LIST
+ ((unsigned char *, UINT4 *, unsigned int));
+static void Decode PROTO_LIST
+ ((UINT4 *, unsigned char *, unsigned int));
+static void MD5_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int));
+static void MD5_memset PROTO_LIST ((POINTER, int, unsigned int));
+
+static unsigned char PADDING[64] = {
+ 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+/* F, G, H and I are basic MD5 functions.
+ */
+#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
+#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
+#define H(x, y, z) ((x) ^ (y) ^ (z))
+#define I(x, y, z) ((y) ^ ((x) | (~z)))
+
+/* ROTATE_LEFT rotates x left n bits.
+ */
+#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
+
+/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
+Rotation is separate from addition to prevent recomputation.
+ */
+#define FF(a, b, c, d, x, s, ac) { \
+ (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+ }
+#define GG(a, b, c, d, x, s, ac) { \
+ (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+ }
+#define HH(a, b, c, d, x, s, ac) { \
+ (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+ }
+#define II(a, b, c, d, x, s, ac) { \
+ (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
+ (a) = ROTATE_LEFT ((a), (s)); \
+ (a) += (b); \
+ }
+
+/* MD5 initialization. Begins an MD5 operation, writing a new context.
+ */
+void MD5Init (context)
+MD5_CTX *context; /* context */
+{
+ context->count[0] = context->count[1] = 0;
+ /* Load magic initialization constants.
+*/
+ context->state[0] = 0x67452301;
+ context->state[1] = 0xefcdab89;
+ context->state[2] = 0x98badcfe;
+ context->state[3] = 0x10325476;
+}
+
+/* MD5 block update operation. Continues an MD5 message-digest
+ operation, processing another message block, and updating the
+ context.
+ */
+void MD5Update (context, input, inputLen)
+MD5_CTX *context; /* context */
+unsigned char *input; /* input block */
+unsigned int inputLen; /* length of input block */
+{
+ unsigned int i, index, partLen;
+
+ /* Compute number of bytes mod 64 */
+ index = (unsigned int)((context->count[0] >> 3) & 0x3F);
+
+ /* Update number of bits */
+ if ((context->count[0] += ((UINT4)inputLen << 3))
+ < ((UINT4)inputLen << 3))
+ context->count[1]++;
+ context->count[1] += ((UINT4)inputLen >> 29);
+
+ partLen = 64 - index;
+
+ /* Transform as many times as possible.
+*/
+ if (inputLen >= partLen) {
+ MD5_memcpy
+ ((POINTER)&context->buffer[index], (POINTER)input, partLen);
+ MD5Transform (context->state, context->buffer);
+
+ for (i = partLen; i + 63 < inputLen; i += 64)
+ MD5Transform (context->state, &input[i]);
+
+ index = 0;
+ }
+ else
+ i = 0;
+
+ /* Buffer remaining input */
+ MD5_memcpy
+ ((POINTER)&context->buffer[index], (POINTER)&input[i],
+ inputLen-i);
+}
+
+/* MD5 finalization. Ends an MD5 message-digest operation, writing the
+ the message digest and zeroizing the context.
+ */
+void MD5Final (digest, context)
+unsigned char digest[16]; /* message digest */
+MD5_CTX *context; /* context */
+{
+ unsigned char bits[8];
+ unsigned int index, padLen;
+
+ /* Save number of bits */
+ Encode (bits, context->count, 8);
+
+ /* Pad out to 56 mod 64.
+*/
+ index = (unsigned int)((context->count[0] >> 3) & 0x3f);
+ padLen = (index < 56) ? (56 - index) : (120 - index);
+ MD5Update (context, PADDING, padLen);
+
+ /* Append length (before padding) */
+ MD5Update (context, bits, 8);
+
+ /* Store state in digest */
+ Encode (digest, context->state, 16);
+
+ /* Zeroize sensitive information.
+*/
+ MD5_memset ((POINTER)context, 0, sizeof (*context));
+}
+
+/* MD5 basic transformation. Transforms state based on block.
+ */
+static void MD5Transform (state, block)
+UINT4 state[4];
+unsigned char block[64];
+{
+ UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
+
+ Decode (x, block, 64);
+
+ /* Round 1 */
+ FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
+ FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
+ FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
+ FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
+ FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
+ FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
+ FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
+ FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
+ FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
+ FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
+ FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
+ FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
+ FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
+ FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
+ FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
+ FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
+
+ /* Round 2 */
+ GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
+ GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
+ GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
+ GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
+ GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
+ GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */
+ GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
+ GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
+ GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
+ GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
+ GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
+ GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
+ GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
+ GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
+ GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
+ GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
+
+ /* Round 3 */
+ HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
+ HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
+ HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
+ HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
+ HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
+ HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
+ HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
+ HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
+ HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
+ HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
+ HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
+ HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */
+ HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
+ HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
+ HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
+ HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
+
+ /* Round 4 */
+ II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
+ II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
+ II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
+ II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
+ II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
+ II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
+ II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
+ II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
+ II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
+ II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
+ II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
+ II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
+ II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
+ II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
+ II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
+ II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
+
+ state[0] += a;
+ state[1] += b;
+ state[2] += c;
+ state[3] += d;
+
+ /* Zeroize sensitive information.
+ */
+ MD5_memset ((POINTER)x, 0, sizeof (x));
+}
+
+/* Encodes input (UINT4) into output (unsigned char). Assumes len is
+ a multiple of 4.
+ */
+static void Encode (output, input, len)
+unsigned char *output;
+UINT4 *input;
+unsigned int len;
+{
+ unsigned int i, j;
+
+ for (i = 0, j = 0; j < len; i++, j += 4) {
+ output[j] = (unsigned char)(input[i] & 0xff);
+ output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
+ output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
+ output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
+ }
+}
+
+/* Decodes input (unsigned char) into output (UINT4). Assumes len is
+ a multiple of 4.
+ */
+static void Decode (output, input, len)
+UINT4 *output;
+unsigned char *input;
+unsigned int len;
+{
+ unsigned int i, j;
+
+ for (i = 0, j = 0; j < len; i++, j += 4)
+ output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) |
+ (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
+}
+
+/* Note: Replace "for loop" with standard memcpy if possible.
+ */
+
+static void MD5_memcpy (output, input, len)
+POINTER output;
+POINTER input;
+unsigned int len;
+{
+ unsigned int i;
+
+ for (i = 0; i < len; i++)
+ output[i] = input[i];
+}
+
+/* Note: Replace "for loop" with standard memset if possible.
+ */
+static void MD5_memset (output, value, len)
+POINTER output;
+int value;
+unsigned int len;
+{
+ unsigned int i;
+
+ for (i = 0; i < len; i++)
+ ((char *)output)[i] = (char)value;
+}
=======================================
--- /dev/null
+++ /src/third-party/md5global.h Sat Feb 27 09:31:24 2010
@@ -0,0 +1,32 @@
+/* MD5GLOBAL.H - RSAREF types and constants
+ */
+
+/* PROTOTYPES should be set to one if and only if the compiler supports
+ function argument prototyping.
+ The following makes PROTOTYPES default to 0 if it has not already
+ been defined with C compiler flags.
+ */
+
+#ifndef PROTOTYPES
+#define PROTOTYPES 0
+#endif
+
+/* POINTER defines a generic pointer type */
+typedef unsigned char *POINTER;
+
+/* UINT2 defines a two byte word */
+typedef unsigned short int UINT2;
+
+/* UINT4 defines a four byte word */
+typedef unsigned long int UINT4;
+
+/* PROTO_LIST is defined depending on how PROTOTYPES is defined above.
+If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it
+ returns an empty list.
+ */
+#if PROTOTYPES
+#define PROTO_LIST(list) list
+#else
+#define PROTO_LIST(list) ()
+#endif
+
=======================================
--- /dev/null
+++ /src/third-party/nessie.h Sat Feb 27 09:31:24 2010
@@ -0,0 +1,139 @@
+
+#ifndef PORTABLE_C__
+#define PORTABLE_C__
+
+#include <limits.h>
+
+/* Definition of minimum-width integer types
+ *
+ * u8 -> unsigned integer type, at least 8 bits, equivalent to unsigned
char
+ * u16 -> unsigned integer type, at least 16 bits
+ * u32 -> unsigned integer type, at least 32 bits
+ *
+ * s8, s16, s32 -> signed counterparts of u8, u16, u32
+ *
+ * Always use macro's T8(), T16() or T32() to obtain exact-width results,
+ * i.e., to specify the size of the result of each expression.
+ */
+
+typedef signed char s8;
+typedef unsigned char u8;
+
+#if UINT_MAX >= 4294967295UL
+
+typedef signed short s16;
+typedef signed int s32;
+typedef unsigned short u16;
+typedef unsigned int u32;
+
+#define ONE32 0xffffffffU
+
+#else
+
+typedef signed int s16;
+typedef signed long s32;
+typedef unsigned int u16;
+typedef unsigned long u32;
+
+#define ONE32 0xffffffffUL
+
+#endif
+
+#define ONE8 0xffU
+#define ONE16 0xffffU
+
+#define T8(x) ((x) & ONE8)
+#define T16(x) ((x) & ONE16)
+#define T32(x) ((x) & ONE32)
+
+#ifdef _MSC_VER
+typedef unsigned __int64 u64;
+typedef signed __int64 s64;
+#define LL(v) (v##i64)
+#define ONE64 LL(0xffffffffffffffff)
+#else /* !_MSC_VER */
+typedef unsigned long long u64;
+typedef signed long long s64;
+#define LL(v) (v##ULL)
+#define ONE64 LL(0xffffffffffffffff)
+#endif /* ?_MSC_VER */
+#define T64(x) ((x) & ONE64)
+#define ROTR64(v, n) (((v) >> (n)) | T64((v) << (64 - (n))))
+/*
+ * Note: the test is used to detect native 64-bit architectures;
+ * if the unsigned long is strictly greater than 32-bit, it is
+ * assumed to be at least 64-bit. This will not work correctly
+ * on (old) 36-bit architectures (PDP-11 for instance).
+ *
+ * On non-64-bit architectures, "long long" is used.
+ */
+
+/*
+ * U8TO32_BIG(c) returns the 32-bit value stored in big-endian convention
+ * in the unsigned char array pointed to by c.
+ */
+#define U8TO32_BIG(c) (((u32)T8(*(c)) << 24) | ((u32)T8(*((c) + 1)) <<
16) | ((u32)T8(*((c) + 2)) << 8) | ((u32)T8(*((c) + 3))))
+
+/*
+ * U8TO32_LITTLE(c) returns the 32-bit value stored in little-endian
convention
+ * in the unsigned char array pointed to by c.
+ */
+#define U8TO32_LITTLE(c) (((u32)T8(*(c))) | ((u32)T8(*((c) + 1)) << 8) |
(u32)T8(*((c) + 2)) << 16) | ((u32)T8(*((c) + 3)) << 24))
+
+/*
+ * U8TO32_BIG(c, v) stores the 32-bit-value v in big-endian convention
+ * into the unsigned char array pointed to by c.
+ */
+#define U32TO8_BIG(c, v) do { u32 x = (v); u8 *d = (c); d[0] = T8(x >>
24); d[1] = T8(x >> 16); d[2] = T8(x >> 8); d[3] = T8(x); } while (0)
+
+/*
+ * U8TO32_LITTLE(c, v) stores the 32-bit-value v in little-endian
convention
+ * into the unsigned char array pointed to by c.
+ */
+#define U32TO8_LITTLE(c, v) do { u32 x = (v); u8 *d = (c); d[0] =
T8(x); d[1] = T8(x >> 8); d[2] = T8(x >> 16); d[3] = T8(x >> 24); } while
(0)
+
+/*
+ * ROTL32(v, n) returns the value of the 32-bit unsigned value v after
+ * a rotation of n bits to the left. It might be replaced by the
appropriate
+ * architecture-specific macro.
+ *
+ * It evaluates v and n twice.
+ *
+ * The compiler might emit a warning if n is the constant 0. The result
+ * is undefined if n is greater than 31.
+ */
+#define ROTL32(v, n) (T32((v) << (n)) | ((v) >> (32 - (n))))
+
+/*
+ * Whirlpool-specific definitions.
+ */
+
+#define DIGESTBYTES 64
+#define DIGESTBITS (8*DIGESTBYTES) /* 512 */
+
+#define WBLOCKBYTES 64
+#define WBLOCKBITS (8*WBLOCKBYTES) /* 512 */
+
+#define LENGTHBYTES 32
+#define LENGTHBITS (8*LENGTHBYTES) /* 256 */
+
+typedef struct NESSIEstruct {
+ u8 bitLength[LENGTHBYTES]; /* global number of hashed bits (256-bit
counter) */
+ u8 buffer[WBLOCKBYTES]; /* buffer of data to hash */
+ int bufferBits; /* current number of bits on the buffer */
+ int bufferPos; /* current (possibly incomplete) byte slot on the
buffer */
+ u64 hash[DIGESTBYTES/8]; /* the hashing state */
+} NESSIEstruct;
+
+// Added by Nightgunner5
+void NESSIEinit(struct NESSIEstruct * const structpointer);
+void NESSIEadd(const unsigned char * const source,
+ unsigned long sourceBits,
+ struct NESSIEstruct * const structpointer);
+void NESSIEfinalize(struct NESSIEstruct * const structpointer,
+ unsigned char * const result);
+// End added by Nightgunner5
+
+
+#endif /* PORTABLE_C__ */
+
=======================================
--- /dev/null
+++ /src/third-party/sha1.c Sat Feb 27 09:31:24 2010
@@ -0,0 +1,389 @@
+/*
+ * sha1.c
+ *
+ * Description:
+ * This file implements the Secure Hashing Algorithm 1 as
+ * defined in FIPS PUB 180-1 published April 17, 1995.
+ *
+ * The SHA-1, produces a 160-bit message digest for a given
+ * data stream. It should take about 2**n steps to find a
+ * message with the same digest as a given message and
+ * 2**(n/2) to find any two messages with the same digest,
+ * when n is the digest size in bits. Therefore, this
+ * algorithm can serve as a means of providing a
+ * "fingerprint" for a message.
+ *
+ * Portability Issues:
+ * SHA-1 is defined in terms of 32-bit "words". This code
+ * uses <stdint.h> (included via "sha1.h" to define 32 and 8
+ * bit unsigned integer types. If your C compiler does not
+ * support 32 bit unsigned integers, this code is not
+ * appropriate.
+ *
+ * Caveats:
+ * SHA-1 is designed to work with messages less than 2^64 bits
+ * long. Although SHA-1 allows a message digest to be generated
+ * for messages of any number of bits less than 2^64, this
+ * implementation only works with messages with a length that is
+ * a multiple of the size of an 8-bit character.
+ *
+ */
+
+#include "sha1.h"
+
+/*
+ * Define the SHA1 circular left shift macro
+ */
+#define SHA1CircularShift(bits,word) \
+ (((word) << (bits)) | ((word) >> (32-(bits))))
+
+/* Local Function Prototyptes */
+void SHA1PadMessage(SHA1Context *);
+void SHA1ProcessMessageBlock(SHA1Context *);
+
+/*
+ * SHA1Reset
+ *
+ * Description:
+ * This function will initialize the SHA1Context in preparation
+ * for computing a new SHA1 message digest.
+ *
+ * Parameters:
+ * context: [in/out]
+ * The context to reset.
+ *
+ * Returns:
+ * sha Error Code.
+ *
+ */
+int SHA1Reset(SHA1Context *context)
+{
+ if (!context)
+ {
+ return shaNull;
+ }
+
+ context->Length_Low = 0;
+ context->Length_High = 0;
+ context->Message_Block_Index = 0;
+
+ context->Intermediate_Hash[0] = 0x67452301;
+ context->Intermediate_Hash[1] = 0xEFCDAB89;
+ context->Intermediate_Hash[2] = 0x98BADCFE;
+ context->Intermediate_Hash[3] = 0x10325476;
+ context->Intermediate_Hash[4] = 0xC3D2E1F0;
+
+ context->Computed = 0;
+ context->Corrupted = 0;
+
+ return shaSuccess;
+}
+
+/*
+ * SHA1Result
+ *
+ * Description:
+ * This function will return the 160-bit message digest into the
+ * Message_Digest array provided by the caller.
+ * NOTE: The first octet of hash is stored in the 0th element,
+ * the last octet of hash in the 19th element.
+ *
+ * Parameters:
+ * context: [in/out]
+ * The context to use to calculate the SHA-1 hash.
+ * Message_Digest: [out]
+ * Where the digest is returned.
+ *
+ * Returns:
+ * sha Error Code.
+ *
+ */
+int SHA1Result( SHA1Context *context,
+ uint8_t Message_Digest[SHA1HashSize])
+{
+ int i;
+
+ if (!context || !Message_Digest)
+ {
+ return shaNull;
+ }
+
+ if (context->Corrupted)
+ {
+ return context->Corrupted;
+ }
+
+ if (!context->Computed)
+ {
+ SHA1PadMessage(context);
+ for(i=0; i<64; ++i)
+ {
+ /* message may be sensitive, clear it out */
+ context->Message_Block[i] = 0;
+ }
+ context->Length_Low = 0; /* and clear length */
+ context->Length_High = 0;
+ context->Computed = 1;
+
+ }
+
+ for(i = 0; i < SHA1HashSize; ++i)
+ {
+ Message_Digest[i] = context->Intermediate_Hash[i>>2]
+ >> 8 * ( 3 - ( i & 0x03 ) );
+ }
+
+ return shaSuccess;
+}
+
+/*
+ * SHA1Input
+ *
+ * Description:
+ * This function accepts an array of octets as the next portion
+ * of the message.
+ *
+ * Parameters:
+ * context: [in/out]
+ * The SHA context to update
+ * message_array: [in]
+ * An array of characters representing the next portion of
+ * the message.
+ * length: [in]
+ * The length of the message in message_array
+ *
+ * Returns:
+ * sha Error Code.
+ *
+ */
+int SHA1Input( SHA1Context *context,
+ const uint8_t *message_array,
+ unsigned length)
+{
+ if (!length)
+ {
+ return shaSuccess;
+ }
+
+ if (!context || !message_array)
+ {
+ return shaNull;
+ }
+
+ if (context->Computed)
+ {
+ context->Corrupted = shaStateError;
+
+ return shaStateError;
+ }
+
+ if (context->Corrupted)
+ {
+ return context->Corrupted;
+ }
+ while(length-- && !context->Corrupted)
+ {
+ context->Message_Block[context->Message_Block_Index++] =
+ (*message_array & 0xFF);
+
+ context->Length_Low += 8;
+ if (context->Length_Low == 0)
+ {
+ context->Length_High++;
+ if (context->Length_High == 0)
+ {
+ /* Message is too long */
+ context->Corrupted = 1;
+ }
+ }
+
+ if (context->Message_Block_Index == 64)
+ {
+ SHA1ProcessMessageBlock(context);
+ }
+
+ message_array++;
+ }
+
+ return shaSuccess;
+}
+
+/*
+ * SHA1ProcessMessageBlock
+ *
+ * Description:
+ * This function will process the next 512 bits of the message
+ * stored in the Message_Block array.
+ *
+ * Parameters:
+ * None.
+ *
+ * Returns:
+ * Nothing.
+ *
+ * Comments:
+
+ * Many of the variable names in this code, especially the
+ * single character names, were used because those were the
+ * names used in the publication.
+ *
+ *
+ */
+void SHA1ProcessMessageBlock(SHA1Context *context)
+{
+ const uint32_t K[] = { /* Constants defined in SHA-1 */
+ 0x5A827999,
+ 0x6ED9EBA1,
+ 0x8F1BBCDC,
+ 0xCA62C1D6
+ };
+ int t; /* Loop counter */
+ uint32_t temp; /* Temporary word value */
+ uint32_t W[80]; /* Word sequence */
+ uint32_t A, B, C, D, E; /* Word buffers */
+
+ /*
+ * Initialize the first 16 words in the array W
+ */
+ for(t = 0; t < 16; t++)
+ {
+ W[t] = context->Message_Block[t * 4] << 24;
+ W[t] |= context->Message_Block[t * 4 + 1] << 16;
+ W[t] |= context->Message_Block[t * 4 + 2] << 8;
+ W[t] |= context->Message_Block[t * 4 + 3];
+ }
+
+ for(t = 16; t < 80; t++)
+ {
+ W[t] = SHA1CircularShift(1,W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16]);
+ }
+
+ A = context->Intermediate_Hash[0];
+ B = context->Intermediate_Hash[1];
+ C = context->Intermediate_Hash[2];
+ D = context->Intermediate_Hash[3];
+ E = context->Intermediate_Hash[4];
+
+ for(t = 0; t < 20; t++)
+ {
+ temp = SHA1CircularShift(5,A) +
+ ((B & C) | ((~B) & D)) + E + W[t] + K[0];
+ E = D;
+ D = C;
+ C = SHA1CircularShift(30,B);
+
+ B = A;
+ A = temp;
+ }
+
+ for(t = 20; t < 40; t++)
+ {
+ temp = SHA1CircularShift(5,A) + (B ^ C ^ D) + E + W[t] + K[1];
+ E = D;
+ D = C;
+ C = SHA1CircularShift(30,B);
+ B = A;
+ A = temp;
+ }
+
+ for(t = 40; t < 60; t++)
+ {
+ temp = SHA1CircularShift(5,A) +
+ ((B & C) | (B & D) | (C & D)) + E + W[t] + K[2];
+ E = D;
+ D = C;
+ C = SHA1CircularShift(30,B);
+ B = A;
+ A = temp;
+ }
+
+ for(t = 60; t < 80; t++)
+ {
+ temp = SHA1CircularShift(5,A) + (B ^ C ^ D) + E + W[t] + K[3];
+ E = D;
+ D = C;
+ C = SHA1CircularShift(30,B);
+ B = A;
+ A = temp;
+ }
+
+ context->Intermediate_Hash[0] += A;
+ context->Intermediate_Hash[1] += B;
+ context->Intermediate_Hash[2] += C;
+ context->Intermediate_Hash[3] += D;
+ context->Intermediate_Hash[4] += E;
+
+ context->Message_Block_Index = 0;
+}
+
+/*
+ * SHA1PadMessage
+ *
+
+ * Description:
+ * According to the standard, the message must be padded to an even
+ * 512 bits. The first padding bit must be a '1'. The last 64
+ * bits represent the length of the original message. All bits in
+ * between should be 0. This function will pad the message
+ * according to those rules by filling the Message_Block array
+ * accordingly. It will also call the ProcessMessageBlock function
+ * provided appropriately. When it returns, it can be assumed that
+ * the message digest has been computed.
+ *
+ * Parameters:
+ * context: [in/out]
+ * The context to pad
+ * ProcessMessageBlock: [in]
+ * The appropriate SHA*ProcessMessageBlock function
+ * Returns:
+ * Nothing.
+ *
+ */
+
+void SHA1PadMessage(SHA1Context *context)
+{
+ /*
+ * Check to see if the current message block is too small to hold
+ * the initial padding bits and length. If so, we will pad the
+ * block, process it, and then continue padding into a second
+ * block.
+ */
+ if (context->Message_Block_Index > 55)
+ {
+ context->Message_Block[context->Message_Block_Index++] = 0x80;
+ while(context->Message_Block_Index < 64)
+ {
+ context->Message_Block[context->Message_Block_Index++] = 0;
+ }
+
+ SHA1ProcessMessageBlock(context);
+
+ while(context->Message_Block_Index < 56)
+ {
+ context->Message_Block[context->Message_Block_Index++] = 0;
+ }
+ }
+ else
+ {
+ context->Message_Block[context->Message_Block_Index++] = 0x80;
+ while(context->Message_Block_Index < 56)
+ {
+
+ context->Message_Block[context->Message_Block_Index++] = 0;
+ }
+ }
+
+ /*
+ * Store the message length as the last 8 octets
+ */
+ context->Message_Block[56] = context->Length_High >> 24;
+ context->Message_Block[57] = context->Length_High >> 16;
+ context->Message_Block[58] = context->Length_High >> 8;
+ context->Message_Block[59] = context->Length_High;
+ context->Message_Block[60] = context->Length_Low >> 24;
+ context->Message_Block[61] = context->Length_Low >> 16;
+ context->Message_Block[62] = context->Length_Low >> 8;
+ context->Message_Block[63] = context->Length_Low;
+
+ SHA1ProcessMessageBlock(context);
+}
=======================================
--- /dev/null
+++ /src/third-party/sha1.h Sat Feb 27 09:31:24 2010
@@ -0,0 +1,73 @@
+/*
+ * sha1.h
+ *
+ * Description:
+ * This is the header file for code which implements the Secure
+ * Hashing Algorithm 1 as defined in FIPS PUB 180-1 published
+ * April 17, 1995.
+ *
+ * Many of the variable names in this code, especially the
+ * single character names, were used because those were the names
+ * used in the publication.
+ *
+ * Please read the file sha1.c for more information.
+ *
+ */
+
+#ifndef _SHA1_H_
+#define _SHA1_H_
+
+#include <stdint.h>
+/*
+ * If you do not have the ISO standard stdint.h header file, then you
+ * must typdef the following:
+ * name meaning
+ * uint32_t unsigned 32 bit integer
+ * uint8_t unsigned 8 bit integer (i.e., unsigned char)
+ * int_least16_t integer of >= 16 bits
+ *
+ */
+
+#ifndef _SHA_enum_
+#define _SHA_enum_
+enum
+{
+ shaSuccess = 0,
+ shaNull, /* Null pointer parameter */
+ shaInputTooLong, /* input data too long */
+ shaStateError /* called Input after Result */
+};
+#endif
+#define SHA1HashSize 20
+
+/*
+ * This structure will hold context information for the SHA-1
+ * hashing operation
+ */
+typedef struct SHA1Context
+{
+ uint32_t Intermediate_Hash[SHA1HashSize/4]; /* Message Digest */
+
+ uint32_t Length_Low; /* Message length in bits */
+ uint32_t Length_High; /* Message length in bits */
+
+ /* Index into message block array */
+ int_least16_t Message_Block_Index;
+ uint8_t Message_Block[64]; /* 512-bit message blocks */
+
+ int Computed; /* Is the digest computed? */
+ int Corrupted; /* Is the message digest corrupted? */
+} SHA1Context;
+
+/*
+ * Function Prototypes
+ */
+
+int SHA1Reset( SHA1Context *);
+int SHA1Input( SHA1Context *,
+ const uint8_t *,
+ unsigned int);
+int SHA1Result( SHA1Context *,
+ uint8_t Message_Digest[SHA1HashSize]);
+
+#endif
=======================================
--- /dev/null
+++ /src/third-party/sha2.c Sat Feb 27 09:31:24 2010
@@ -0,0 +1,950 @@
+/*
+ * FIPS 180-2 SHA-224/256/384/512 implementation
+ * Last update: 02/02/2007
+ * Issue date: 04/30/2005
+ *
+ * Copyright (C) 2005, 2007 Olivier Gay <olivi...@a3.epfl.ch>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#if 0
+#define UNROLL_LOOPS /* Enable loops unrolling */
+#endif
+
+#include <string.h>
+
+#include "sha2.h"
+
+#define SHFR(x, n) (x >> n)
+#define ROTR(x, n) ((x >> n) | (x << ((sizeof(x) << 3) - n)))
+#define ROTL(x, n) ((x << n) | (x >> ((sizeof(x) << 3) - n)))
+#define CH(x, y, z) ((x & y) ^ (~x & z))
+#define MAJ(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
+
+#define SHA256_F1(x) (ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22))
+#define SHA256_F2(x) (ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25))
+#define SHA256_F3(x) (ROTR(x, 7) ^ ROTR(x, 18) ^ SHFR(x, 3))
+#define SHA256_F4(x) (ROTR(x, 17) ^ ROTR(x, 19) ^ SHFR(x, 10))
+
+#define SHA512_F1(x) (ROTR(x, 28) ^ ROTR(x, 34) ^ ROTR(x, 39))
+#define SHA512_F2(x) (ROTR(x, 14) ^ ROTR(x, 18) ^ ROTR(x, 41))
+#define SHA512_F3(x) (ROTR(x, 1) ^ ROTR(x, 8) ^ SHFR(x, 7))
+#define SHA512_F4(x) (ROTR(x, 19) ^ ROTR(x, 61) ^ SHFR(x, 6))
+
+#define UNPACK32(x, str) \
+{ \
+ *((str) + 3) = (uint8) ((x) ); \
+ *((str) + 2) = (uint8) ((x) >> 8); \
+ *((str) + 1) = (uint8) ((x) >> 16); \
+ *((str) + 0) = (uint8) ((x) >> 24); \
+}
+
+#define PACK32(str, x) \
+{ \
+ *(x) = ((uint32) *((str) + 3) ) \
+ | ((uint32) *((str) + 2) << 8) \
+ | ((uint32) *((str) + 1) << 16) \
+ | ((uint32) *((str) + 0) << 24); \
+}
+
+#define UNPACK64(x, str) \
+{ \
+ *((str) + 7) = (uint8) ((x) ); \
+ *((str) + 6) = (uint8) ((x) >> 8); \
+ *((str) + 5) = (uint8) ((x) >> 16); \
+ *((str) + 4) = (uint8) ((x) >> 24); \
+ *((str) + 3) = (uint8) ((x) >> 32); \
+ *((str) + 2) = (uint8) ((x) >> 40); \
+ *((str) + 1) = (uint8) ((x) >> 48); \
+ *((str) + 0) = (uint8) ((x) >> 56); \
+}
+
+#define PACK64(str, x) \
+{ \
+ *(x) = ((uint64) *((str) + 7) ) \
+ | ((uint64) *((str) + 6) << 8) \
+ | ((uint64) *((str) + 5) << 16) \
+ | ((uint64) *((str) + 4) << 24) \
+ | ((uint64) *((str) + 3) << 32) \
+ | ((uint64) *((str) + 2) << 40) \
+ | ((uint64) *((str) + 1) << 48) \
+ | ((uint64) *((str) + 0) << 56); \
+}
+
+/* Macros used for loops unrolling */
+
+#define SHA256_SCR(i) \
+{ \
+ w[i] = SHA256_F4(w[i - 2]) + w[i - 7] \
+ + SHA256_F3(w[i - 15]) + w[i - 16]; \
+}
+
+#define SHA512_SCR(i) \
+{ \
+ w[i] = SHA512_F4(w[i - 2]) + w[i - 7] \
+ + SHA512_F3(w[i - 15]) + w[i - 16]; \
+}
+
+#define SHA256_EXP(a, b, c, d, e, f, g, h, j) \
+{ \
+ t1 = wv[h] + SHA256_F2(wv[e]) + CH(wv[e], wv[f], wv[g]) \
+ + sha256_k[j] + w[j]; \
+ t2 = SHA256_F1(wv[a]) + MAJ(wv[a], wv[b], wv[c]); \
+ wv[d] += t1; \
+ wv[h] = t1 + t2; \
+}
+
+#define SHA512_EXP(a, b, c, d, e, f, g ,h, j) \
+{ \
+ t1 = wv[h] + SHA512_F2(wv[e]) + CH(wv[e], wv[f], wv[g]) \
+ + sha512_k[j] + w[j]; \
+ t2 = SHA512_F1(wv[a]) + MAJ(wv[a], wv[b], wv[c]); \
+ wv[d] += t1; \
+ wv[h] = t1 + t2; \
+}
+
+uint32 sha224_h0[8] =
+ {0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
+ 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4};
+
+uint32 sha256_h0[8] =
+ {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
+ 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19};
+
+uint64 sha384_h0[8] =
+ {0xcbbb9d5dc1059ed8ULL, 0x629a292a367cd507ULL,
+ 0x9159015a3070dd17ULL, 0x152fecd8f70e5939ULL,
+ 0x67332667ffc00b31ULL, 0x8eb44a8768581511ULL,
+ 0xdb0c2e0d64f98fa7ULL, 0x47b5481dbefa4fa4ULL};
+
+uint64 sha512_h0[8] =
+ {0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL,
+ 0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL,
+ 0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL,
+ 0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL};
+
+uint32 sha256_k[64] =
+ {0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
+ 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
+ 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
+ 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
+ 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
+ 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
+ 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
+ 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
+ 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
+ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
+ 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
+ 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
+ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
+ 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2};
+
+uint64 sha512_k[80] =
+ {0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL,
+ 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL,
+ 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
+ 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL,
+ 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL,
+ 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
+ 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL,
+ 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL,
+ 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL,
+ 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL,
+ 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL,
+ 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
+ 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL,
+ 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL,
+ 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL,
+ 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL,
+ 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL,
+ 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
+ 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL,
+ 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL,
+ 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL,
+ 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL,
+ 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL,
+ 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
+ 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL,
+ 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL,
+ 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL,
+ 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL,
+ 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL,
+ 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
+ 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL,
+ 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL,
+ 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL,
+ 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL,
+ 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL,
+ 0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
+ 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL,
+ 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL,
+ 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL,
+ 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL};
+
+/* SHA-256 functions */
+
+void sha256_transf(sha256_ctx *ctx, const unsigned char *message,
+ unsigned int block_nb)
+{
+ uint32 w[64];
+ uint32 wv[8];
+ uint32 t1, t2;
+ const unsigned char *sub_block;
+ int i;
+
+#ifndef UNROLL_LOOPS
+ int j;
+#endif
+
+ for (i = 0; i < (int) block_nb; i++) {
+ sub_block = message + (i << 6);
+
+#ifndef UNROLL_LOOPS
+ for (j = 0; j < 16; j++) {
+ PACK32(&sub_block[j << 2], &w[j]);
+ }
+
+ for (j = 16; j < 64; j++) {
+ SHA256_SCR(j);
+ }
+
+ for (j = 0; j < 8; j++) {
+ wv[j] = ctx->h[j];
+ }
+
+ for (j = 0; j < 64; j++) {
+ t1 = wv[7] + SHA256_F2(wv[4]) + CH(wv[4], wv[5], wv[6])
+ + sha256_k[j] + w[j];
+ t2 = SHA256_F1(wv[0]) + MAJ(wv[0], wv[1], wv[2]);
+ wv[7] = wv[6];
+ wv[6] = wv[5];
+ wv[5] = wv[4];
+ wv[4] = wv[3] + t1;
+ wv[3] = wv[2];
+ wv[2] = wv[1];
+ wv[1] = wv[0];
+ wv[0] = t1 + t2;
+ }
+
+ for (j = 0; j < 8; j++) {
+ ctx->h[j] += wv[j];
+ }
+#else
+ PACK32(&sub_block[ 0], &w[ 0]); PACK32(&sub_block[ 4], &w[ 1]);
+ PACK32(&sub_block[ 8], &w[ 2]); PACK32(&sub_block[12], &w[ 3]);
+ PACK32(&sub_block[16], &w[ 4]); PACK32(&sub_block[20], &w[ 5]);
+ PACK32(&sub_block[24], &w[ 6]); PACK32(&sub_block[28], &w[ 7]);
+ PACK32(&sub_block[32], &w[ 8]); PACK32(&sub_block[36], &w[ 9]);
+ PACK32(&sub_block[40], &w[10]); PACK32(&sub_block[44], &w[11]);
+ PACK32(&sub_block[48], &w[12]); PACK32(&sub_block[52], &w[13]);
+ PACK32(&sub_block[56], &w[14]); PACK32(&sub_block[60], &w[15]);
+
+ SHA256_SCR(16); SHA256_SCR(17); SHA256_SCR(18); SHA256_SCR(19);
+ SHA256_SCR(20); SHA256_SCR(21); SHA256_SCR(22); SHA256_SCR(23);
+ SHA256_SCR(24); SHA256_SCR(25); SHA256_SCR(26); SHA256_SCR(27);
+ SHA256_SCR(28); SHA256_SCR(29); SHA256_SCR(30); SHA256_SCR(31);
+ SHA256_SCR(32); SHA256_SCR(33); SHA256_SCR(34); SHA256_SCR(35);
+ SHA256_SCR(36); SHA256_SCR(37); SHA256_SCR(38); SHA256_SCR(39);
+ SHA256_SCR(40); SHA256_SCR(41); SHA256_SCR(42); SHA256_SCR(43);
+ SHA256_SCR(44); SHA256_SCR(45); SHA256_SCR(46); SHA256_SCR(47);
+ SHA256_SCR(48); SHA256_SCR(49); SHA256_SCR(50); SHA256_SCR(51);
+ SHA256_SCR(52); SHA256_SCR(53); SHA256_SCR(54); SHA256_SCR(55);
+ SHA256_SCR(56); SHA256_SCR(57); SHA256_SCR(58); SHA256_SCR(59);
+ SHA256_SCR(60); SHA256_SCR(61); SHA256_SCR(62); SHA256_SCR(63);
+
+ wv[0] = ctx->h[0]; wv[1] = ctx->h[1];
+ wv[2] = ctx->h[2]; wv[3] = ctx->h[3];
+ wv[4] = ctx->h[4]; wv[5] = ctx->h[5];
+ wv[6] = ctx->h[6]; wv[7] = ctx->h[7];
+
+ SHA256_EXP(0,1,2,3,4,5,6,7, 0); SHA256_EXP(7,0,1,2,3,4,5,6, 1);
+ SHA256_EXP(6,7,0,1,2,3,4,5, 2); SHA256_EXP(5,6,7,0,1,2,3,4, 3);
+ SHA256_EXP(4,5,6,7,0,1,2,3, 4); SHA256_EXP(3,4,5,6,7,0,1,2, 5);
+ SHA256_EXP(2,3,4,5,6,7,0,1, 6); SHA256_EXP(1,2,3,4,5,6,7,0, 7);
+ SHA256_EXP(0,1,2,3,4,5,6,7, 8); SHA256_EXP(7,0,1,2,3,4,5,6, 9);
+ SHA256_EXP(6,7,0,1,2,3,4,5,10); SHA256_EXP(5,6,7,0,1,2,3,4,11);
+ SHA256_EXP(4,5,6,7,0,1,2,3,12); SHA256_EXP(3,4,5,6,7,0,1,2,13);
+ SHA256_EXP(2,3,4,5,6,7,0,1,14); SHA256_EXP(1,2,3,4,5,6,7,0,15);
+ SHA256_EXP(0,1,2,3,4,5,6,7,16); SHA256_EXP(7,0,1,2,3,4,5,6,17);
+ SHA256_EXP(6,7,0,1,2,3,4,5,18); SHA256_EXP(5,6,7,0,1,2,3,4,19);
+ SHA256_EXP(4,5,6,7,0,1,2,3,20); SHA256_EXP(3,4,5,6,7,0,1,2,21);
+ SHA256_EXP(2,3,4,5,6,7,0,1,22); SHA256_EXP(1,2,3,4,5,6,7,0,23);
+ SHA256_EXP(0,1,2,3,4,5,6,7,24); SHA256_EXP(7,0,1,2,3,4,5,6,25);
+ SHA256_EXP(6,7,0,1,2,3,4,5,26); SHA256_EXP(5,6,7,0,1,2,3,4,27);
+ SHA256_EXP(4,5,6,7,0,1,2,3,28); SHA256_EXP(3,4,5,6,7,0,1,2,29);
+ SHA256_EXP(2,3,4,5,6,7,0,1,30); SHA256_EXP(1,2,3,4,5,6,7,0,31);
+ SHA256_EXP(0,1,2,3,4,5,6,7,32); SHA256_EXP(7,0,1,2,3,4,5,6,33);
+ SHA256_EXP(6,7,0,1,2,3,4,5,34); SHA256_EXP(5,6,7,0,1,2,3,4,35);
+ SHA256_EXP(4,5,6,7,0,1,2,3,36); SHA256_EXP(3,4,5,6,7,0,1,2,37);
+ SHA256_EXP(2,3,4,5,6,7,0,1,38); SHA256_EXP(1,2,3,4,5,6,7,0,39);
+ SHA256_EXP(0,1,2,3,4,5,6,7,40); SHA256_EXP(7,0,1,2,3,4,5,6,41);
+ SHA256_EXP(6,7,0,1,2,3,4,5,42); SHA256_EXP(5,6,7,0,1,2,3,4,43);
+ SHA256_EXP(4,5,6,7,0,1,2,3,44); SHA256_EXP(3,4,5,6,7,0,1,2,45);
+ SHA256_EXP(2,3,4,5,6,7,0,1,46); SHA256_EXP(1,2,3,4,5,6,7,0,47);
+ SHA256_EXP(0,1,2,3,4,5,6,7,48); SHA256_EXP(7,0,1,2,3,4,5,6,49);
+ SHA256_EXP(6,7,0,1,2,3,4,5,50); SHA256_EXP(5,6,7,0,1,2,3,4,51);
+ SHA256_EXP(4,5,6,7,0,1,2,3,52); SHA256_EXP(3,4,5,6,7,0,1,2,53);
+ SHA256_EXP(2,3,4,5,6,7,0,1,54); SHA256_EXP(1,2,3,4,5,6,7,0,55);
+ SHA256_EXP(0,1,2,3,4,5,6,7,56); SHA256_EXP(7,0,1,2,3,4,5,6,57);
+ SHA256_EXP(6,7,0,1,2,3,4,5,58); SHA256_EXP(5,6,7,0,1,2,3,4,59);
+ SHA256_EXP(4,5,6,7,0,1,2,3,60); SHA256_EXP(3,4,5,6,7,0,1,2,61);
+ SHA256_EXP(2,3,4,5,6,7,0,1,62); SHA256_EXP(1,2,3,4,5,6,7,0,63);
+
+ ctx->h[0] += wv[0]; ctx->h[1] += wv[1];
+ ctx->h[2] += wv[2]; ctx->h[3] += wv[3];
+ ctx->h[4] += wv[4]; ctx->h[5] += wv[5];
+ ctx->h[6] += wv[6]; ctx->h[7] += wv[7];
+#endif /* !UNROLL_LOOPS */
+ }
+}
+
+void sha256(const unsigned char *message, unsigned int len, unsigned char
*digest)
+{
+ sha256_ctx ctx;
+
+ sha256_init(&ctx);
+ sha256_update(&ctx, message, len);
+ sha256_final(&ctx, digest);
+}
+
+void sha256_init(sha256_ctx *ctx)
+{
+#ifndef UNROLL_LOOPS
+ int i;
+ for (i = 0; i < 8; i++) {
+ ctx->h[i] = sha256_h0[i];
+ }
+#else
+ ctx->h[0] = sha256_h0[0]; ctx->h[1] = sha256_h0[1];
+ ctx->h[2] = sha256_h0[2]; ctx->h[3] = sha256_h0[3];
+ ctx->h[4] = sha256_h0[4]; ctx->h[5] = sha256_h0[5];
+ ctx->h[6] = sha256_h0[6]; ctx->h[7] = sha256_h0[7];
+#endif /* !UNROLL_LOOPS */
+
+ ctx->len = 0;
+ ctx->tot_len = 0;
+}
+
+void sha256_update(sha256_ctx *ctx, const unsigned char *message,
+ unsigned int len)
+{
+ unsigned int block_nb;
+ unsigned int new_len, rem_len, tmp_len;
+ const unsigned char *shifted_message;
+
+ tmp_len = SHA256_BLOCK_SIZE - ctx->len;
+ rem_len = len < tmp_len ? len : tmp_len;
+
+ memcpy(&ctx->block[ctx->len], message, rem_len);
+
+ if (ctx->len + len < SHA256_BLOCK_SIZE) {
+ ctx->len += len;
+ return;
+ }
+
+ new_len = len - rem_len;
+ block_nb = new_len / SHA256_BLOCK_SIZE;
+
+ shifted_message = message + rem_len;
+
+ sha256_transf(ctx, ctx->block, 1);
+ sha256_transf(ctx, shifted_message, block_nb);
+
+ rem_len = new_len % SHA256_BLOCK_SIZE;
+
+ memcpy(ctx->block, &shifted_message[block_nb << 6],
+ rem_len);
+
+ ctx->len = rem_len;
+ ctx->tot_len += (block_nb + 1) << 6;
+}
+
+void sha256_final(sha256_ctx *ctx, unsigned char *digest)
+{
+ unsigned int block_nb;
+ unsigned int pm_len;
+ unsigned int len_b;
+
+#ifndef UNROLL_LOOPS
+ int i;
+#endif
+
+ block_nb = (1 + ((SHA256_BLOCK_SIZE - 9)
+ < (ctx->len % SHA256_BLOCK_SIZE)));
+
+ len_b = (ctx->tot_len + ctx->len) << 3;
+ pm_len = block_nb << 6;
+
+ memset(ctx->block + ctx->len, 0, pm_len - ctx->len);
+ ctx->block[ctx->len] = 0x80;
+ UNPACK32(len_b, ctx->block + pm_len - 4);
+
+ sha256_transf(ctx, ctx->block, block_nb);
+
+#ifndef UNROLL_LOOPS
+ for (i = 0 ; i < 8; i++) {
+ UNPACK32(ctx->h[i], &digest[i << 2]);
+ }
+#else
+ UNPACK32(ctx->h[0], &digest[ 0]);
+ UNPACK32(ctx->h[1], &digest[ 4]);
+ UNPACK32(ctx->h[2], &digest[ 8]);
+ UNPACK32(ctx->h[3], &digest[12]);
+ UNPACK32(ctx->h[4], &digest[16]);
+ UNPACK32(ctx->h[5], &digest[20]);
+ UNPACK32(ctx->h[6], &digest[24]);
+ UNPACK32(ctx->h[7], &digest[28]);
+#endif /* !UNROLL_LOOPS */
+}
+
+/* SHA-512 functions */
+
+void sha512_transf(sha512_ctx *ctx, const unsigned char *message,
+ unsigned int block_nb)
+{
+ uint64 w[80];
+ uint64 wv[8];
+ uint64 t1, t2;
+ const unsigned char *sub_block;
+ int i, j;
+
+ for (i = 0; i < (int) block_nb; i++) {
+ sub_block = message + (i << 7);
+
+#ifndef UNROLL_LOOPS
+ for (j = 0; j < 16; j++) {
+ PACK64(&sub_block[j << 3], &w[j]);
+ }
+
+ for (j = 16; j < 80; j++) {
+ SHA512_SCR(j);
+ }
+
+ for (j = 0; j < 8; j++) {
+ wv[j] = ctx->h[j];
+ }
+
+ for (j = 0; j < 80; j++) {
+ t1 = wv[7] + SHA512_F2(wv[4]) + CH(wv[4], wv[5], wv[6])
+ + sha512_k[j] + w[j];
+ t2 = SHA512_F1(wv[0]) + MAJ(wv[0], wv[1], wv[2]);
+ wv[7] = wv[6];
+ wv[6] = wv[5];
+ wv[5] = wv[4];
+ wv[4] = wv[3] + t1;
+ wv[3] = wv[2];
+ wv[2] = wv[1];
+ wv[1] = wv[0];
+ wv[0] = t1 + t2;
+ }
+
+ for (j = 0; j < 8; j++) {
+ ctx->h[j] += wv[j];
+ }
+#else
+ PACK64(&sub_block[ 0], &w[ 0]); PACK64(&sub_block[ 8], &w[ 1]);
+ PACK64(&sub_block[ 16], &w[ 2]); PACK64(&sub_block[ 24], &w[ 3]);
+ PACK64(&sub_block[ 32], &w[ 4]); PACK64(&sub_block[ 40], &w[ 5]);
+ PACK64(&sub_block[ 48], &w[ 6]); PACK64(&sub_block[ 56], &w[ 7]);
+ PACK64(&sub_block[ 64], &w[ 8]); PACK64(&sub_block[ 72], &w[ 9]);
+ PACK64(&sub_block[ 80], &w[10]); PACK64(&sub_block[ 88], &w[11]);
+ PACK64(&sub_block[ 96], &w[12]); PACK64(&sub_block[104], &w[13]);
+ PACK64(&sub_block[112], &w[14]); PACK64(&sub_block[120], &w[15]);
+
+ SHA512_SCR(16); SHA512_SCR(17); SHA512_SCR(18); SHA512_SCR(19);
+ SHA512_SCR(20); SHA512_SCR(21); SHA512_SCR(22); SHA512_SCR(23);
+ SHA512_SCR(24); SHA512_SCR(25); SHA512_SCR(26); SHA512_SCR(27);
+ SHA512_SCR(28); SHA512_SCR(29); SHA512_SCR(30); SHA512_SCR(31);
+ SHA512_SCR(32); SHA512_SCR(33); SHA512_SCR(34); SHA512_SCR(35);
+ SHA512_SCR(36); SHA512_SCR(37); SHA512_SCR(38); SHA512_SCR(39);
+ SHA512_SCR(40); SHA512_SCR(41); SHA512_SCR(42); SHA512_SCR(43);
+ SHA512_SCR(44); SHA512_SCR(45); SHA512_SCR(46); SHA512_SCR(47);
+ SHA512_SCR(48); SHA512_SCR(49); SHA512_SCR(50); SHA512_SCR(51);
+ SHA512_SCR(52); SHA512_SCR(53); SHA512_SCR(54); SHA512_SCR(55);
+ SHA512_SCR(56); SHA512_SCR(57); SHA512_SCR(58); SHA512_SCR(59);
+ SHA512_SCR(60); SHA512_SCR(61); SHA512_SCR(62); SHA512_SCR(63);
+ SHA512_SCR(64); SHA512_SCR(65); SHA512_SCR(66); SHA512_SCR(67);
+ SHA512_SCR(68); SHA512_SCR(69); SHA512_SCR(70); SHA512_SCR(71);
+ SHA512_SCR(72); SHA512_SCR(73); SHA512_SCR(74); SHA512_SCR(75);
+ SHA512_SCR(76); SHA512_SCR(77); SHA512_SCR(78); SHA512_SCR(79);
+
+ wv[0] = ctx->h[0]; wv[1] = ctx->h[1];
+ wv[2] = ctx->h[2]; wv[3] = ctx->h[3];
+ wv[4] = ctx->h[4]; wv[5] = ctx->h[5];
+ wv[6] = ctx->h[6]; wv[7] = ctx->h[7];
+
+ j = 0;
+
+ do {
+ SHA512_EXP(0,1,2,3,4,5,6,7,j); j++;
+ SHA512_EXP(7,0,1,2,3,4,5,6,j); j++;
+ SHA512_EXP(6,7,0,1,2,3,4,5,j); j++;
+ SHA512_EXP(5,6,7,0,1,2,3,4,j); j++;
+ SHA512_EXP(4,5,6,7,0,1,2,3,j); j++;
+ SHA512_EXP(3,4,5,6,7,0,1,2,j); j++;
+ SHA512_EXP(2,3,4,5,6,7,0,1,j); j++;
+ SHA512_EXP(1,2,3,4,5,6,7,0,j); j++;
+ } while (j < 80);
+
+ ctx->h[0] += wv[0]; ctx->h[1] += wv[1];
+ ctx->h[2] += wv[2]; ctx->h[3] += wv[3];
+ ctx->h[4] += wv[4]; ctx->h[5] += wv[5];
+ ctx->h[6] += wv[6]; ctx->h[7] += wv[7];
+#endif /* !UNROLL_LOOPS */
+ }
+}
+
+void sha512(const unsigned char *message, unsigned int len,
+ unsigned char *digest)
+{
+ sha512_ctx ctx;
+
+ sha512_init(&ctx);
+ sha512_update(&ctx, message, len);
+ sha512_final(&ctx, digest);
+}
+
+void sha512_init(sha512_ctx *ctx)
+{
+#ifndef UNROLL_LOOPS
+ int i;
+ for (i = 0; i < 8; i++) {
+ ctx->h[i] = sha512_h0[i];
+ }
+#else
+ ctx->h[0] = sha512_h0[0]; ctx->h[1] = sha512_h0[1];
+ ctx->h[2] = sha512_h0[2]; ctx->h[3] = sha512_h0[3];
+ ctx->h[4] = sha512_h0[4]; ctx->h[5] = sha512_h0[5];
+ ctx->h[6] = sha512_h0[6]; ctx->h[7] = sha512_h0[7];
+#endif /* !UNROLL_LOOPS */
+
+ ctx->len = 0;
+ ctx->tot_len = 0;
+}
+
+void sha512_update(sha512_ctx *ctx, const unsigned char *message,
+ unsigned int len)
+{
+ unsigned int block_nb;
+ unsigned int new_len, rem_len, tmp_len;
+ const unsigned char *shifted_message;
+
+ tmp_len = SHA512_BLOCK_SIZE - ctx->len;
+ rem_len = len < tmp_len ? len : tmp_len;
+
+ memcpy(&ctx->block[ctx->len], message, rem_len);
+
+ if (ctx->len + len < SHA512_BLOCK_SIZE) {
+ ctx->len += len;
+ return;
+ }
+
+ new_len = len - rem_len;
+ block_nb = new_len / SHA512_BLOCK_SIZE;
+
+ shifted_message = message + rem_len;
+
+ sha512_transf(ctx, ctx->block, 1);
+ sha512_transf(ctx, shifted_message, block_nb);
+
+ rem_len = new_len % SHA512_BLOCK_SIZE;
+
+ memcpy(ctx->block, &shifted_message[block_nb << 7],
+ rem_len);
+
+ ctx->len = rem_len;
+ ctx->tot_len += (block_nb + 1) << 7;
+}
+
+void sha512_final(sha512_ctx *ctx, unsigned char *digest)
+{
+ unsigned int block_nb;
+ unsigned int pm_len;
+ unsigned int len_b;
+
+#ifndef UNROLL_LOOPS
+ int i;
+#endif
+
+ block_nb = 1 + ((SHA512_BLOCK_SIZE - 17)
+ < (ctx->len % SHA512_BLOCK_SIZE));
+
+ len_b = (ctx->tot_len + ctx->len) << 3;
+ pm_len = block_nb << 7;
+
+ memset(ctx->block + ctx->len, 0, pm_len - ctx->len);
+ ctx->block[ctx->len] = 0x80;
+ UNPACK32(len_b, ctx->block + pm_len - 4);
+
+ sha512_transf(ctx, ctx->block, block_nb);
+
+#ifndef UNROLL_LOOPS
+ for (i = 0 ; i < 8; i++) {
+ UNPACK64(ctx->h[i], &digest[i << 3]);
+ }
+#else
+ UNPACK64(ctx->h[0], &digest[ 0]);
+ UNPACK64(ctx->h[1], &digest[ 8]);
+ UNPACK64(ctx->h[2], &digest[16]);
+ UNPACK64(ctx->h[3], &digest[24]);
+ UNPACK64(ctx->h[4], &digest[32]);
+ UNPACK64(ctx->h[5], &digest[40]);
+ UNPACK64(ctx->h[6], &digest[48]);
+ UNPACK64(ctx->h[7], &digest[56]);
+#endif /* !UNROLL_LOOPS */
+}
+
+/* SHA-384 functions */
+
+void sha384(const unsigned char *message, unsigned int len,
+ unsigned char *digest)
+{
+ sha384_ctx ctx;
+
+ sha384_init(&ctx);
+ sha384_update(&ctx, message, len);
+ sha384_final(&ctx, digest);
+}
+
+void sha384_init(sha384_ctx *ctx)
+{
+#ifndef UNROLL_LOOPS
+ int i;
+ for (i = 0; i < 8; i++) {
+ ctx->h[i] = sha384_h0[i];
+ }
+#else
+ ctx->h[0] = sha384_h0[0]; ctx->h[1] = sha384_h0[1];
+ ctx->h[2] = sha384_h0[2]; ctx->h[3] = sha384_h0[3];
+ ctx->h[4] = sha384_h0[4]; ctx->h[5] = sha384_h0[5];
+ ctx->h[6] = sha384_h0[6]; ctx->h[7] = sha384_h0[7];
+#endif /* !UNROLL_LOOPS */
+
+ ctx->len = 0;
+ ctx->tot_len = 0;
+}
+
+void sha384_update(sha384_ctx *ctx, const unsigned char *message,
+ unsigned int len)
+{
+ unsigned int block_nb;
+ unsigned int new_len, rem_len, tmp_len;
+ const unsigned char *shifted_message;
+
+ tmp_len = SHA384_BLOCK_SIZE - ctx->len;
+ rem_len = len < tmp_len ? len : tmp_len;
+
+ memcpy(&ctx->block[ctx->len], message, rem_len);
+
+ if (ctx->len + len < SHA384_BLOCK_SIZE) {
+ ctx->len += len;
+ return;
+ }
+
+ new_len = len - rem_len;
+ block_nb = new_len / SHA384_BLOCK_SIZE;
+
+ shifted_message = message + rem_len;
+
+ sha512_transf(ctx, ctx->block, 1);
+ sha512_transf(ctx, shifted_message, block_nb);
+
+ rem_len = new_len % SHA384_BLOCK_SIZE;
+
+ memcpy(ctx->block, &shifted_message[block_nb << 7],
+ rem_len);
+
+ ctx->len = rem_len;
+ ctx->tot_len += (block_nb + 1) << 7;
+}
+
+void sha384_final(sha384_ctx *ctx, unsigned char *digest)
+{
+ unsigned int block_nb;
+ unsigned int pm_len;
+ unsigned int len_b;
+
+#ifndef UNROLL_LOOPS
+ int i;
+#endif
+
+ block_nb = (1 + ((SHA384_BLOCK_SIZE - 17)
+ < (ctx->len % SHA384_BLOCK_SIZE)));
+
+ len_b = (ctx->tot_len + ctx->len) << 3;
+ pm_len = block_nb << 7;
+
+ memset(ctx->block + ctx->len, 0, pm_len - ctx->len);
+ ctx->block[ctx->len] = 0x80;
+ UNPACK32(len_b, ctx->block + pm_len - 4);
+
+ sha512_transf(ctx, ctx->block, block_nb);
+
+#ifndef UNROLL_LOOPS
+ for (i = 0 ; i < 6; i++) {
+ UNPACK64(ctx->h[i], &digest[i << 3]);
+ }
+#else
+ UNPACK64(ctx->h[0], &digest[ 0]);
+ UNPACK64(ctx->h[1], &digest[ 8]);
+ UNPACK64(ctx->h[2], &digest[16]);
+ UNPACK64(ctx->h[3], &digest[24]);
+ UNPACK64(ctx->h[4], &digest[32]);
+ UNPACK64(ctx->h[5], &digest[40]);
+#endif /* !UNROLL_LOOPS */
+}
+
+/* SHA-224 functions */
+
+void sha224(const unsigned char *message, unsigned int len,
+ unsigned char *digest)
+{
+ sha224_ctx ctx;
+
+ sha224_init(&ctx);
+ sha224_update(&ctx, message, len);
+ sha224_final(&ctx, digest);
+}
+
+void sha224_init(sha224_ctx *ctx)
+{
+#ifndef UNROLL_LOOPS
+ int i;
+ for (i = 0; i < 8; i++) {
+ ctx->h[i] = sha224_h0[i];
+ }
+#else
+ ctx->h[0] = sha224_h0[0]; ctx->h[1] = sha224_h0[1];
+ ctx->h[2] = sha224_h0[2]; ctx->h[3] = sha224_h0[3];
+ ctx->h[4] = sha224_h0[4]; ctx->h[5] = sha224_h0[5];
+ ctx->h[6] = sha224_h0[6]; ctx->h[7] = sha224_h0[7];
+#endif /* !UNROLL_LOOPS */
+
+ ctx->len = 0;
+ ctx->tot_len = 0;
+}
+
+void sha224_update(sha224_ctx *ctx, const unsigned char *message,
+ unsigned int len)
+{
+ unsigned int block_nb;
+ unsigned int new_len, rem_len, tmp_len;
+ const unsigned char *shifted_message;
+
+ tmp_len = SHA224_BLOCK_SIZE - ctx->len;
+ rem_len = len < tmp_len ? len : tmp_len;
+
+ memcpy(&ctx->block[ctx->len], message, rem_len);
+
+ if (ctx->len + len < SHA224_BLOCK_SIZE) {
+ ctx->len += len;
+ return;
+ }
+
+ new_len = len - rem_len;
+ block_nb = new_len / SHA224_BLOCK_SIZE;
+
+ shifted_message = message + rem_len;
+
+ sha256_transf(ctx, ctx->block, 1);
+ sha256_transf(ctx, shifted_message, block_nb);
+
+ rem_len = new_len % SHA224_BLOCK_SIZE;
+
+ memcpy(ctx->block, &shifted_message[block_nb << 6],
+ rem_len);
+
+ ctx->len = rem_len;
+ ctx->tot_len += (block_nb + 1) << 6;
+}
+
+void sha224_final(sha224_ctx *ctx, unsigned char *digest)
+{
+ unsigned int block_nb;
+ unsigned int pm_len;
+ unsigned int len_b;
+
+#ifndef UNROLL_LOOPS
+ int i;
+#endif
+
+ block_nb = (1 + ((SHA224_BLOCK_SIZE - 9)
+ < (ctx->len % SHA224_BLOCK_SIZE)));
+
+ len_b = (ctx->tot_len + ctx->len) << 3;
+ pm_len = block_nb << 6;
+
+ memset(ctx->block + ctx->len, 0, pm_len - ctx->len);
+ ctx->block[ctx->len] = 0x80;
+ UNPACK32(len_b, ctx->block + pm_len - 4);
+
+ sha256_transf(ctx, ctx->block, block_nb);
+
+#ifndef UNROLL_LOOPS
+ for (i = 0 ; i < 7; i++) {
+ UNPACK32(ctx->h[i], &digest[i << 2]);
+ }
+#else
+ UNPACK32(ctx->h[0], &digest[ 0]);
+ UNPACK32(ctx->h[1], &digest[ 4]);
+ UNPACK32(ctx->h[2], &digest[ 8]);
+ UNPACK32(ctx->h[3], &digest[12]);
+ UNPACK32(ctx->h[4], &digest[16]);
+ UNPACK32(ctx->h[5], &digest[20]);
+ UNPACK32(ctx->h[6], &digest[24]);
+#endif /* !UNROLL_LOOPS */
+}
+
+#ifdef TEST_VECTORS
+
+/* FIPS 180-2 Validation tests */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+void test(const unsigned char *vector, unsigned char *digest,
+ unsigned int digest_size)
+{
+ unsigned char output[2 * SHA512_DIGEST_SIZE + 1];
+ int i;
+
+ output[2 * digest_size] = '\0';
+
+ for (i = 0; i < (int) digest_size ; i++) {
+ sprintf((char *) output + 2 * i, "%02x", digest[i]);
+ }
+
+ printf("H: %s\n", output);
+ if (strcmp((char *) vector, (char *) output)) {
+ fprintf(stderr, "Test failed.\n");
+ exit(EXIT_FAILURE);
+ }
+}
+
+int main()
+{
+ static const unsigned char *vectors[4][3] =
+ { /* SHA-224 */
+ {
+ "23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7",
+ "75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525",
+ "20794655980c91d8bbb4c1ea97618a4bf03f42581948b2ee4ee7ad67",
+ },
+ /* SHA-256 */
+ {
+ "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
+ "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1",
+ "cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0",
+ },
+ /* SHA-384 */
+ {
+ "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed"
+ "8086072ba1e7cc2358baeca134c825a7",
+ "09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712"
+ "fcc7c71a557e2db966c3e9fa91746039",
+ "9d0e1809716474cb086e834e310a4a1ced149e9c00f248527972cec5704c2a5b"
+ "07b8b3dc38ecc4ebae97ddd87f3d8985",
+ },
+ /* SHA-512 */
+ {
+ "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a"
+ "2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f",
+ "8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018"
+ "501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909",
+ "e718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973eb"
+ "de0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09b"
+ }
+ };
+
+ static const unsigned char message1[] = "abc";
+ static const unsigned char message2a[]
= "abcdbcdecdefdefgefghfghighijhi"
+ "jkijkljklmklmnlmnomnopnopq";
+ static const unsigned char message2b[] =
+ "abcdefghbcdefghicdefghijdefghijkefghij"
+ "klfghijklmghijklmnhijklmnoijklmnopjklm"
+ "nopqklmnopqrlmnopqrsmnopqrstnopqrstu";
+ unsigned char *message3;
+ unsigned int message3_len = 1000000;
+ unsigned char digest[SHA512_DIGEST_SIZE];
+
+ message3 = malloc(message3_len);
+ if (message3 == NULL) {
+ fprintf(stderr, "Can't allocate memory\n");
+ return -1;
+ }
+ memset(message3, 'a', message3_len);
+
+ printf("SHA-2 FIPS 180-2 Validation tests\n\n");
+ printf("SHA-224 Test vectors\n");
+
+ sha224(message1, strlen((char *) message1), digest);
+ test(vectors[0][0], digest, SHA224_DIGEST_SIZE);
+ sha224(message2a, strlen((char *) message2a), digest);
+ test(vectors[0][1], digest, SHA224_DIGEST_SIZE);
+ sha224(message3, message3_len, digest);
+ test(vectors[0][2], digest, SHA224_DIGEST_SIZE);
+ printf("\n");
+
+ printf("SHA-256 Test vectors\n");
+
+ sha256(message1, strlen((char *) message1), digest);
+ test(vectors[1][0], digest, SHA256_DIGEST_SIZE);
+ sha256(message2a, strlen((char *) message2a), digest);
+ test(vectors[1][1], digest, SHA256_DIGEST_SIZE);
+ sha256(message3, message3_len, digest);
+ test(vectors[1][2], digest, SHA256_DIGEST_SIZE);
+ printf("\n");
+
+ printf("SHA-384 Test vectors\n");
+
+ sha384(message1, strlen((char *) message1), digest);
+ test(vectors[2][0], digest, SHA384_DIGEST_SIZE);
+ sha384(message2b, strlen((char *) message2b), digest);
+ test(vectors[2][1], digest, SHA384_DIGEST_SIZE);
+ sha384(message3, message3_len, digest);
+ test(vectors[2][2], digest, SHA384_DIGEST_SIZE);
+ printf("\n");
+
+ printf("SHA-512 Test vectors\n");
+
+ sha512(message1, strlen((char *) message1), digest);
+ test(vectors[3][0], digest, SHA512_DIGEST_SIZE);
+ sha512(message2b, strlen((char *) message2b), digest);
+ test(vectors[3][1], digest, SHA512_DIGEST_SIZE);
+ sha512(message3, message3_len, digest);
+ test(vectors[3][2], digest, SHA512_DIGEST_SIZE);
+ printf("\n");
+
+ printf("All tests passed.\n");
+
+ return 0;
+}
+
+#endif /* TEST_VECTORS */
+
=======================================
--- /dev/null
+++ /src/third-party/sha2.h Sat Feb 27 09:31:24 2010
@@ -0,0 +1,108 @@
+/*
+ * FIPS 180-2 SHA-224/256/384/512 implementation
+ * Last update: 02/02/2007
+ * Issue date: 04/30/2005
+ *
+ * Copyright (C) 2005, 2007 Olivier Gay <olivi...@a3.epfl.ch>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef SHA2_H
+#define SHA2_H
+
+#define SHA224_DIGEST_SIZE ( 224 / 8)
+#define SHA256_DIGEST_SIZE ( 256 / 8)
+#define SHA384_DIGEST_SIZE ( 384 / 8)
+#define SHA512_DIGEST_SIZE ( 512 / 8)
+
+#define SHA256_BLOCK_SIZE ( 512 / 8)
+#define SHA512_BLOCK_SIZE (1024 / 8)
+#define SHA384_BLOCK_SIZE SHA512_BLOCK_SIZE
+#define SHA224_BLOCK_SIZE SHA256_BLOCK_SIZE
+
+#ifndef SHA2_TYPES
+#define SHA2_TYPES
+typedef unsigned char uint8;
+typedef unsigned int uint32;
+typedef unsigned long long uint64;
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+ unsigned int tot_len;
+ unsigned int len;
+ unsigned char block[2 * SHA256_BLOCK_SIZE];
+ uint32 h[8];
+} sha256_ctx;
+
+typedef struct {
+ unsigned int tot_len;
+ unsigned int len;
+ unsigned char block[2 * SHA512_BLOCK_SIZE];
+ uint64 h[8];
+} sha512_ctx;
+
+typedef sha512_ctx sha384_ctx;
+typedef sha256_ctx sha224_ctx;
+
+void sha224_init(sha224_ctx *ctx);
+void sha224_update(sha224_ctx *ctx, const unsigned char *message,
+ unsigned int len);
+void sha224_final(sha224_ctx *ctx, unsigned char *digest);
+void sha224(const unsigned char *message, unsigned int len,
+ unsigned char *digest);
+
+void sha256_init(sha256_ctx * ctx);
+void sha256_update(sha256_ctx *ctx, const unsigned char *message,
+ unsigned int len);
+void sha256_final(sha256_ctx *ctx, unsigned char *digest);
+void sha256(const unsigned char *message, unsigned int len,
+ unsigned char *digest);
+
+void sha384_init(sha384_ctx *ctx);
+void sha384_update(sha384_ctx *ctx, const unsigned char *message,
+ unsigned int len);
+void sha384_final(sha384_ctx *ctx, unsigned char *digest);
+void sha384(const unsigned char *message, unsigned int len,
+ unsigned char *digest);
+
+void sha512_init(sha512_ctx *ctx);
+void sha512_update(sha512_ctx *ctx, const unsigned char *message,
+ unsigned int len);
+void sha512_final(sha512_ctx *ctx, unsigned char *digest);
+void sha512(const unsigned char *message, unsigned int len,
+ unsigned char *digest);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !SHA2_H */
+
=======================================
--- /dev/null
+++ /src/third-party/whirlpool.c Sat Feb 27 09:31:24 2010
@@ -0,0 +1,1694 @@
+/**
+ * The Whirlpool hashing function.
+ *
+ * <P>
+ * <b>References</b>
+ *
+ * <P>
+ * The Whirlpool algorithm was developed by
+ * <a href="mailto:pbar...@scopus.com.br">Paulo S. L. M. Barreto</a> and
+ * <a href="mailto:vincent...@cryptomathic.com">Vincent Rijmen</a>.
+ *
+ * See
+ * P.S.L.M. Barreto, V. Rijmen,
+ * ``The Whirlpool hashing function,''
+ * NESSIE submission, 2000 (tweaked version, 2001),
+ *
<https://www.cosic.esat.kuleuven.ac.be/nessie/workshop/submissions/whirlpool.zip>
+ *
+ * @author Paulo S.L.M. Barreto
+ * @author Vincent Rijmen.
+ *
+ * @version 3.0 (2003.03.12)
+ *
+ *
=============================================================================
+ *
+ * Differences from version 2.1:
+ *
+ * - Suboptimal diffusion matrix replaced by cir(1, 1, 4, 1, 8, 5, 2, 9).
+ *
+ *
=============================================================================
+ *
+ * Differences from version 2.0:
+ *
+ * - Generation of ISO/IEC 10118-3 test vectors.
+ * - Bug fix: nonzero carry was ignored when tallying the data length
+ * (this bug apparently only manifested itself when feeding data
+ * in pieces rather than in a single chunk at once).
+ * - Support for MS Visual C++ 64-bit integer arithmetic.
+ *
+ * Differences from version 1.0:
+ *
+ * - Original S-box replaced by the tweaked, hardware-efficient version.
+ *
+ *
=============================================================================
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#include "nessie.h"
+
+/* #define TRACE_INTERMEDIATE_VALUES */
+
+/*
+ * The number of rounds of the internal dedicated block cipher.
+ */
+#define R 10
+
+/*
+ * Though Whirlpool is endianness-neutral, the encryption tables are listed
+ * in BIG-ENDIAN format, which is adopted throughout this implementation
+ * (but little-endian notation would be equally suitable if consistently
+ * employed).
+ */
+
+static const u64 C0[256] = {
+ LL(0x18186018c07830d8), LL(0x23238c2305af4626),
LL(0xc6c63fc67ef991b8), LL(0xe8e887e8136fcdfb),
+ LL(0x878726874ca113cb), LL(0xb8b8dab8a9626d11),
LL(0x0101040108050209), LL(0x4f4f214f426e9e0d),
+ LL(0x3636d836adee6c9b), LL(0xa6a6a2a6590451ff),
LL(0xd2d26fd2debdb90c), LL(0xf5f5f3f5fb06f70e),
+ LL(0x7979f979ef80f296), LL(0x6f6fa16f5fcede30),
LL(0x91917e91fcef3f6d), LL(0x52525552aa07a4f8),
+ LL(0x60609d6027fdc047), LL(0xbcbccabc89766535),
LL(0x9b9b569baccd2b37), LL(0x8e8e028e048c018a),
+ LL(0xa3a3b6a371155bd2), LL(0x0c0c300c603c186c),
LL(0x7b7bf17bff8af684), LL(0x3535d435b5e16a80),
+ LL(0x1d1d741de8693af5), LL(0xe0e0a7e05347ddb3),
LL(0xd7d77bd7f6acb321), LL(0xc2c22fc25eed999c),
+ LL(0x2e2eb82e6d965c43), LL(0x4b4b314b627a9629),
LL(0xfefedffea321e15d), LL(0x575741578216aed5),
+ LL(0x15155415a8412abd), LL(0x7777c1779fb6eee8),
LL(0x3737dc37a5eb6e92), LL(0xe5e5b3e57b56d79e),
+ LL(0x9f9f469f8cd92313), LL(0xf0f0e7f0d317fd23),
LL(0x4a4a354a6a7f9420), LL(0xdada4fda9e95a944),
+ LL(0x58587d58fa25b0a2), LL(0xc9c903c906ca8fcf),
LL(0x2929a429558d527c), LL(0x0a0a280a5022145a),
+ LL(0xb1b1feb1e14f7f50), LL(0xa0a0baa0691a5dc9),
LL(0x6b6bb16b7fdad614), LL(0x85852e855cab17d9),
+ LL(0xbdbdcebd8173673c), LL(0x5d5d695dd234ba8f),
LL(0x1010401080502090), LL(0xf4f4f7f4f303f507),
+ LL(0xcbcb0bcb16c08bdd), LL(0x3e3ef83eedc67cd3),
LL(0x0505140528110a2d), LL(0x676781671fe6ce78),
+ LL(0xe4e4b7e47353d597), LL(0x27279c2725bb4e02),
LL(0x4141194132588273), LL(0x8b8b168b2c9d0ba7),
+ LL(0xa7a7a6a7510153f6), LL(0x7d7de97dcf94fab2),
LL(0x95956e95dcfb3749), LL(0xd8d847d88e9fad56),
+ LL(0xfbfbcbfb8b30eb70), LL(0xeeee9fee2371c1cd),
LL(0x7c7ced7cc791f8bb), LL(0x6666856617e3cc71),
+ LL(0xdddd53dda68ea77b), LL(0x17175c17b84b2eaf),
LL(0x4747014702468e45), LL(0x9e9e429e84dc211a),
+ LL(0xcaca0fca1ec589d4), LL(0x2d2db42d75995a58),
LL(0xbfbfc6bf9179632e), LL(0x07071c07381b0e3f),
+ LL(0xadad8ead012347ac), LL(0x5a5a755aea2fb4b0),
LL(0x838336836cb51bef), LL(0x3333cc3385ff66b6),
+ LL(0x636391633ff2c65c), LL(0x02020802100a0412),
LL(0xaaaa92aa39384993), LL(0x7171d971afa8e2de),
+ LL(0xc8c807c80ecf8dc6), LL(0x19196419c87d32d1),
LL(0x494939497270923b), LL(0xd9d943d9869aaf5f),
+ LL(0xf2f2eff2c31df931), LL(0xe3e3abe34b48dba8),
LL(0x5b5b715be22ab6b9), LL(0x88881a8834920dbc),
+ LL(0x9a9a529aa4c8293e), LL(0x262698262dbe4c0b),
LL(0x3232c8328dfa64bf), LL(0xb0b0fab0e94a7d59),
+ LL(0xe9e983e91b6acff2), LL(0x0f0f3c0f78331e77),
LL(0xd5d573d5e6a6b733), LL(0x80803a8074ba1df4),
+ LL(0xbebec2be997c6127), LL(0xcdcd13cd26de87eb),
LL(0x3434d034bde46889), LL(0x48483d487a759032),
+ LL(0xffffdbffab24e354), LL(0x7a7af57af78ff48d),
LL(0x90907a90f4ea3d64), LL(0x5f5f615fc23ebe9d),
+ LL(0x202080201da0403d), LL(0x6868bd6867d5d00f),
LL(0x1a1a681ad07234ca), LL(0xaeae82ae192c41b7),
+ LL(0xb4b4eab4c95e757d), LL(0x54544d549a19a8ce),
LL(0x93937693ece53b7f), LL(0x222288220daa442f),
+ LL(0x64648d6407e9c863), LL(0xf1f1e3f1db12ff2a),
LL(0x7373d173bfa2e6cc), LL(0x12124812905a2482),
+ LL(0x40401d403a5d807a), LL(0x0808200840281048),
LL(0xc3c32bc356e89b95), LL(0xecec97ec337bc5df),
+ LL(0xdbdb4bdb9690ab4d), LL(0xa1a1bea1611f5fc0),
LL(0x8d8d0e8d1c830791), LL(0x3d3df43df5c97ac8),
+ LL(0x97976697ccf1335b), LL(0x0000000000000000),
LL(0xcfcf1bcf36d483f9), LL(0x2b2bac2b4587566e),
+ LL(0x7676c57697b3ece1), LL(0x8282328264b019e6),
LL(0xd6d67fd6fea9b128), LL(0x1b1b6c1bd87736c3),
+ LL(0xb5b5eeb5c15b7774), LL(0xafaf86af112943be),
LL(0x6a6ab56a77dfd41d), LL(0x50505d50ba0da0ea),
+ LL(0x45450945124c8a57), LL(0xf3f3ebf3cb18fb38),
LL(0x3030c0309df060ad), LL(0xefef9bef2b74c3c4),
+ LL(0x3f3ffc3fe5c37eda), LL(0x55554955921caac7),
LL(0xa2a2b2a2791059db), LL(0xeaea8fea0365c9e9),
+ LL(0x656589650fecca6a), LL(0xbabad2bab9686903),
LL(0x2f2fbc2f65935e4a), LL(0xc0c027c04ee79d8e),
+ LL(0xdede5fdebe81a160), LL(0x1c1c701ce06c38fc),
LL(0xfdfdd3fdbb2ee746), LL(0x4d4d294d52649a1f),
+ LL(0x92927292e4e03976), LL(0x7575c9758fbceafa),
LL(0x06061806301e0c36), LL(0x8a8a128a249809ae),
+ LL(0xb2b2f2b2f940794b), LL(0xe6e6bfe66359d185),
LL(0x0e0e380e70361c7e), LL(0x1f1f7c1ff8633ee7),
+ LL(0x6262956237f7c455), LL(0xd4d477d4eea3b53a),
LL(0xa8a89aa829324d81), LL(0x96966296c4f43152),
+ LL(0xf9f9c3f99b3aef62), LL(0xc5c533c566f697a3),
LL(0x2525942535b14a10), LL(0x59597959f220b2ab),
+ LL(0x84842a8454ae15d0), LL(0x7272d572b7a7e4c5),
LL(0x3939e439d5dd72ec), LL(0x4c4c2d4c5a619816),
+ LL(0x5e5e655eca3bbc94), LL(0x7878fd78e785f09f),
LL(0x3838e038ddd870e5), LL(0x8c8c0a8c14860598),
+ LL(0xd1d163d1c6b2bf17), LL(0xa5a5aea5410b57e4),
LL(0xe2e2afe2434dd9a1), LL(0x616199612ff8c24e),
+ LL(0xb3b3f6b3f1457b42), LL(0x2121842115a54234),
LL(0x9c9c4a9c94d62508), LL(0x1e1e781ef0663cee),
+ LL(0x4343114322528661), LL(0xc7c73bc776fc93b1),
LL(0xfcfcd7fcb32be54f), LL(0x0404100420140824),
+ LL(0x51515951b208a2e3), LL(0x99995e99bcc72f25),
LL(0x6d6da96d4fc4da22), LL(0x0d0d340d68391a65),
+ LL(0xfafacffa8335e979), LL(0xdfdf5bdfb684a369),
LL(0x7e7ee57ed79bfca9), LL(0x242490243db44819),
+ LL(0x3b3bec3bc5d776fe), LL(0xabab96ab313d4b9a),
LL(0xcece1fce3ed181f0), LL(0x1111441188552299),
+ LL(0x8f8f068f0c890383), LL(0x4e4e254e4a6b9c04),
LL(0xb7b7e6b7d1517366), LL(0xebeb8beb0b60cbe0),
+ LL(0x3c3cf03cfdcc78c1), LL(0x81813e817cbf1ffd),
LL(0x94946a94d4fe3540), LL(0xf7f7fbf7eb0cf31c),
+ LL(0xb9b9deb9a1676f18), LL(0x13134c13985f268b),
LL(0x2c2cb02c7d9c5851), LL(0xd3d36bd3d6b8bb05),
+ LL(0xe7e7bbe76b5cd38c), LL(0x6e6ea56e57cbdc39),
LL(0xc4c437c46ef395aa), LL(0x03030c03180f061b),
+ LL(0x565645568a13acdc), LL(0x44440d441a49885e),
LL(0x7f7fe17fdf9efea0), LL(0xa9a99ea921374f88),
+ LL(0x2a2aa82a4d825467), LL(0xbbbbd6bbb16d6b0a),
LL(0xc1c123c146e29f87), LL(0x53535153a202a6f1),
+ LL(0xdcdc57dcae8ba572), LL(0x0b0b2c0b58271653),
LL(0x9d9d4e9d9cd32701), LL(0x6c6cad6c47c1d82b),
+ LL(0x3131c43195f562a4), LL(0x7474cd7487b9e8f3),
LL(0xf6f6fff6e309f115), LL(0x464605460a438c4c),
+ LL(0xacac8aac092645a5), LL(0x89891e893c970fb5),
LL(0x14145014a04428b4), LL(0xe1e1a3e15b42dfba),
+ LL(0x16165816b04e2ca6), LL(0x3a3ae83acdd274f7),
LL(0x6969b9696fd0d206), LL(0x09092409482d1241),
+ LL(0x7070dd70a7ade0d7), LL(0xb6b6e2b6d954716f),
LL(0xd0d067d0ceb7bd1e), LL(0xeded93ed3b7ec7d6),
+ LL(0xcccc17cc2edb85e2), LL(0x424215422a578468),
LL(0x98985a98b4c22d2c), LL(0xa4a4aaa4490e55ed),
+ LL(0x2828a0285d885075), LL(0x5c5c6d5cda31b886),
LL(0xf8f8c7f8933fed6b), LL(0x8686228644a411c2),
+};
+
+static const u64 C1[256] = {
+ LL(0xd818186018c07830), LL(0x2623238c2305af46),
LL(0xb8c6c63fc67ef991), LL(0xfbe8e887e8136fcd),
+ LL(0xcb878726874ca113), LL(0x11b8b8dab8a9626d),
LL(0x0901010401080502), LL(0x0d4f4f214f426e9e),
+ LL(0x9b3636d836adee6c), LL(0xffa6a6a2a6590451),
LL(0x0cd2d26fd2debdb9), LL(0x0ef5f5f3f5fb06f7),
+ LL(0x967979f979ef80f2), LL(0x306f6fa16f5fcede),
LL(0x6d91917e91fcef3f), LL(0xf852525552aa07a4),
+ LL(0x4760609d6027fdc0), LL(0x35bcbccabc897665),
LL(0x379b9b569baccd2b), LL(0x8a8e8e028e048c01),
+ LL(0xd2a3a3b6a371155b), LL(0x6c0c0c300c603c18),
LL(0x847b7bf17bff8af6), LL(0x803535d435b5e16a),
+ LL(0xf51d1d741de8693a), LL(0xb3e0e0a7e05347dd),
LL(0x21d7d77bd7f6acb3), LL(0x9cc2c22fc25eed99),
+ LL(0x432e2eb82e6d965c), LL(0x294b4b314b627a96),
LL(0x5dfefedffea321e1), LL(0xd5575741578216ae),
+ LL(0xbd15155415a8412a), LL(0xe87777c1779fb6ee),
LL(0x923737dc37a5eb6e), LL(0x9ee5e5b3e57b56d7),
+ LL(0x139f9f469f8cd923), LL(0x23f0f0e7f0d317fd),
LL(0x204a4a354a6a7f94), LL(0x44dada4fda9e95a9),
+ LL(0xa258587d58fa25b0), LL(0xcfc9c903c906ca8f),
LL(0x7c2929a429558d52), LL(0x5a0a0a280a502214),
+ LL(0x50b1b1feb1e14f7f), LL(0xc9a0a0baa0691a5d),
LL(0x146b6bb16b7fdad6), LL(0xd985852e855cab17),
+ LL(0x3cbdbdcebd817367), LL(0x8f5d5d695dd234ba),
LL(0x9010104010805020), LL(0x07f4f4f7f4f303f5),
+ LL(0xddcbcb0bcb16c08b), LL(0xd33e3ef83eedc67c),
LL(0x2d0505140528110a), LL(0x78676781671fe6ce),
+ LL(0x97e4e4b7e47353d5), LL(0x0227279c2725bb4e),
LL(0x7341411941325882), LL(0xa78b8b168b2c9d0b),
+ LL(0xf6a7a7a6a7510153), LL(0xb27d7de97dcf94fa),
LL(0x4995956e95dcfb37), LL(0x56d8d847d88e9fad),
+ LL(0x70fbfbcbfb8b30eb), LL(0xcdeeee9fee2371c1),
LL(0xbb7c7ced7cc791f8), LL(0x716666856617e3cc),
+ LL(0x7bdddd53dda68ea7), LL(0xaf17175c17b84b2e),
LL(0x454747014702468e), LL(0x1a9e9e429e84dc21),
+ LL(0xd4caca0fca1ec589), LL(0x582d2db42d75995a),
LL(0x2ebfbfc6bf917963), LL(0x3f07071c07381b0e),
+ LL(0xacadad8ead012347), LL(0xb05a5a755aea2fb4),
LL(0xef838336836cb51b), LL(0xb63333cc3385ff66),
+ LL(0x5c636391633ff2c6), LL(0x1202020802100a04),
LL(0x93aaaa92aa393849), LL(0xde7171d971afa8e2),
+ LL(0xc6c8c807c80ecf8d), LL(0xd119196419c87d32),
LL(0x3b49493949727092), LL(0x5fd9d943d9869aaf),
+ LL(0x31f2f2eff2c31df9), LL(0xa8e3e3abe34b48db),
LL(0xb95b5b715be22ab6), LL(0xbc88881a8834920d),
+ LL(0x3e9a9a529aa4c829), LL(0x0b262698262dbe4c),
LL(0xbf3232c8328dfa64), LL(0x59b0b0fab0e94a7d),
+ LL(0xf2e9e983e91b6acf), LL(0x770f0f3c0f78331e),
LL(0x33d5d573d5e6a6b7), LL(0xf480803a8074ba1d),
+ LL(0x27bebec2be997c61), LL(0xebcdcd13cd26de87),
LL(0x893434d034bde468), LL(0x3248483d487a7590),
+ LL(0x54ffffdbffab24e3), LL(0x8d7a7af57af78ff4),
LL(0x6490907a90f4ea3d), LL(0x9d5f5f615fc23ebe),
+ LL(0x3d202080201da040), LL(0x0f6868bd6867d5d0),
LL(0xca1a1a681ad07234), LL(0xb7aeae82ae192c41),
+ LL(0x7db4b4eab4c95e75), LL(0xce54544d549a19a8),
LL(0x7f93937693ece53b), LL(0x2f222288220daa44),
+ LL(0x6364648d6407e9c8), LL(0x2af1f1e3f1db12ff),
LL(0xcc7373d173bfa2e6), LL(0x8212124812905a24),
+ LL(0x7a40401d403a5d80), LL(0x4808082008402810),
LL(0x95c3c32bc356e89b), LL(0xdfecec97ec337bc5),
+ LL(0x4ddbdb4bdb9690ab), LL(0xc0a1a1bea1611f5f),
LL(0x918d8d0e8d1c8307), LL(0xc83d3df43df5c97a),
+ LL(0x5b97976697ccf133), LL(0x0000000000000000),
LL(0xf9cfcf1bcf36d483), LL(0x6e2b2bac2b458756),
+ LL(0xe17676c57697b3ec), LL(0xe68282328264b019),
LL(0x28d6d67fd6fea9b1), LL(0xc31b1b6c1bd87736),
+ LL(0x74b5b5eeb5c15b77), LL(0xbeafaf86af112943),
LL(0x1d6a6ab56a77dfd4), LL(0xea50505d50ba0da0),
+ LL(0x5745450945124c8a), LL(0x38f3f3ebf3cb18fb),
LL(0xad3030c0309df060), LL(0xc4efef9bef2b74c3),
+ LL(0xda3f3ffc3fe5c37e), LL(0xc755554955921caa),
LL(0xdba2a2b2a2791059), LL(0xe9eaea8fea0365c9),
+ LL(0x6a656589650fecca), LL(0x03babad2bab96869),
LL(0x4a2f2fbc2f65935e), LL(0x8ec0c027c04ee79d),
+ LL(0x60dede5fdebe81a1), LL(0xfc1c1c701ce06c38),
LL(0x46fdfdd3fdbb2ee7), LL(0x1f4d4d294d52649a),
+ LL(0x7692927292e4e039), LL(0xfa7575c9758fbcea),
LL(0x3606061806301e0c), LL(0xae8a8a128a249809),
+ LL(0x4bb2b2f2b2f94079), LL(0x85e6e6bfe66359d1),
LL(0x7e0e0e380e70361c), LL(0xe71f1f7c1ff8633e),
+ LL(0x556262956237f7c4), LL(0x3ad4d477d4eea3b5),
LL(0x81a8a89aa829324d), LL(0x5296966296c4f431),
+ LL(0x62f9f9c3f99b3aef), LL(0xa3c5c533c566f697),
LL(0x102525942535b14a), LL(0xab59597959f220b2),
+ LL(0xd084842a8454ae15), LL(0xc57272d572b7a7e4),
LL(0xec3939e439d5dd72), LL(0x164c4c2d4c5a6198),
+ LL(0x945e5e655eca3bbc), LL(0x9f7878fd78e785f0),
LL(0xe53838e038ddd870), LL(0x988c8c0a8c148605),
+ LL(0x17d1d163d1c6b2bf), LL(0xe4a5a5aea5410b57),
LL(0xa1e2e2afe2434dd9), LL(0x4e616199612ff8c2),
+ LL(0x42b3b3f6b3f1457b), LL(0x342121842115a542),
LL(0x089c9c4a9c94d625), LL(0xee1e1e781ef0663c),
+ LL(0x6143431143225286), LL(0xb1c7c73bc776fc93),
LL(0x4ffcfcd7fcb32be5), LL(0x2404041004201408),
+ LL(0xe351515951b208a2), LL(0x2599995e99bcc72f),
LL(0x226d6da96d4fc4da), LL(0x650d0d340d68391a),
+ LL(0x79fafacffa8335e9), LL(0x69dfdf5bdfb684a3),
LL(0xa97e7ee57ed79bfc), LL(0x19242490243db448),
+ LL(0xfe3b3bec3bc5d776), LL(0x9aabab96ab313d4b),
LL(0xf0cece1fce3ed181), LL(0x9911114411885522),
+ LL(0x838f8f068f0c8903), LL(0x044e4e254e4a6b9c),
LL(0x66b7b7e6b7d15173), LL(0xe0ebeb8beb0b60cb),
+ LL(0xc13c3cf03cfdcc78), LL(0xfd81813e817cbf1f),
LL(0x4094946a94d4fe35), LL(0x1cf7f7fbf7eb0cf3),
+ LL(0x18b9b9deb9a1676f), LL(0x8b13134c13985f26),
LL(0x512c2cb02c7d9c58), LL(0x05d3d36bd3d6b8bb),
+ LL(0x8ce7e7bbe76b5cd3), LL(0x396e6ea56e57cbdc),
LL(0xaac4c437c46ef395), LL(0x1b03030c03180f06),
+ LL(0xdc565645568a13ac), LL(0x5e44440d441a4988),
LL(0xa07f7fe17fdf9efe), LL(0x88a9a99ea921374f),
+ LL(0x672a2aa82a4d8254), LL(0x0abbbbd6bbb16d6b),
LL(0x87c1c123c146e29f), LL(0xf153535153a202a6),
+ LL(0x72dcdc57dcae8ba5), LL(0x530b0b2c0b582716),
LL(0x019d9d4e9d9cd327), LL(0x2b6c6cad6c47c1d8),
+ LL(0xa43131c43195f562), LL(0xf37474cd7487b9e8),
LL(0x15f6f6fff6e309f1), LL(0x4c464605460a438c),
+ LL(0xa5acac8aac092645), LL(0xb589891e893c970f),
LL(0xb414145014a04428), LL(0xbae1e1a3e15b42df),
+ LL(0xa616165816b04e2c), LL(0xf73a3ae83acdd274),
LL(0x066969b9696fd0d2), LL(0x4109092409482d12),
+ LL(0xd77070dd70a7ade0), LL(0x6fb6b6e2b6d95471),
LL(0x1ed0d067d0ceb7bd), LL(0xd6eded93ed3b7ec7),
+ LL(0xe2cccc17cc2edb85), LL(0x68424215422a5784),
LL(0x2c98985a98b4c22d), LL(0xeda4a4aaa4490e55),
+ LL(0x752828a0285d8850), LL(0x865c5c6d5cda31b8),
LL(0x6bf8f8c7f8933fed), LL(0xc28686228644a411),
+};
+
+static const u64 C2[256] = {
+ LL(0x30d818186018c078), LL(0x462623238c2305af),
LL(0x91b8c6c63fc67ef9), LL(0xcdfbe8e887e8136f),
+ LL(0x13cb878726874ca1), LL(0x6d11b8b8dab8a962),
LL(0x0209010104010805), LL(0x9e0d4f4f214f426e),
+ LL(0x6c9b3636d836adee), LL(0x51ffa6a6a2a65904),
LL(0xb90cd2d26fd2debd), LL(0xf70ef5f5f3f5fb06),
+ LL(0xf2967979f979ef80), LL(0xde306f6fa16f5fce),
LL(0x3f6d91917e91fcef), LL(0xa4f852525552aa07),
+ LL(0xc04760609d6027fd), LL(0x6535bcbccabc8976),
LL(0x2b379b9b569baccd), LL(0x018a8e8e028e048c),
+ LL(0x5bd2a3a3b6a37115), LL(0x186c0c0c300c603c),
LL(0xf6847b7bf17bff8a), LL(0x6a803535d435b5e1),
+ LL(0x3af51d1d741de869), LL(0xddb3e0e0a7e05347),
LL(0xb321d7d77bd7f6ac), LL(0x999cc2c22fc25eed),
+ LL(0x5c432e2eb82e6d96), LL(0x96294b4b314b627a),
LL(0xe15dfefedffea321), LL(0xaed5575741578216),
+ LL(0x2abd15155415a841), LL(0xeee87777c1779fb6),
LL(0x6e923737dc37a5eb), LL(0xd79ee5e5b3e57b56),
+ LL(0x23139f9f469f8cd9), LL(0xfd23f0f0e7f0d317),
LL(0x94204a4a354a6a7f), LL(0xa944dada4fda9e95),
+ LL(0xb0a258587d58fa25), LL(0x8fcfc9c903c906ca),
LL(0x527c2929a429558d), LL(0x145a0a0a280a5022),
+ LL(0x7f50b1b1feb1e14f), LL(0x5dc9a0a0baa0691a),
LL(0xd6146b6bb16b7fda), LL(0x17d985852e855cab),
+ LL(0x673cbdbdcebd8173), LL(0xba8f5d5d695dd234),
LL(0x2090101040108050), LL(0xf507f4f4f7f4f303),
+ LL(0x8bddcbcb0bcb16c0), LL(0x7cd33e3ef83eedc6),
LL(0x0a2d050514052811), LL(0xce78676781671fe6),
+ LL(0xd597e4e4b7e47353), LL(0x4e0227279c2725bb),
LL(0x8273414119413258), LL(0x0ba78b8b168b2c9d),
+ LL(0x53f6a7a7a6a75101), LL(0xfab27d7de97dcf94),
LL(0x374995956e95dcfb), LL(0xad56d8d847d88e9f),
+ LL(0xeb70fbfbcbfb8b30), LL(0xc1cdeeee9fee2371),
LL(0xf8bb7c7ced7cc791), LL(0xcc716666856617e3),
+ LL(0xa77bdddd53dda68e), LL(0x2eaf17175c17b84b),
LL(0x8e45474701470246), LL(0x211a9e9e429e84dc),
+ LL(0x89d4caca0fca1ec5), LL(0x5a582d2db42d7599),
LL(0x632ebfbfc6bf9179), LL(0x0e3f07071c07381b),
+ LL(0x47acadad8ead0123), LL(0xb4b05a5a755aea2f),
LL(0x1bef838336836cb5), LL(0x66b63333cc3385ff),
+ LL(0xc65c636391633ff2), LL(0x041202020802100a),
LL(0x4993aaaa92aa3938), LL(0xe2de7171d971afa8),
+ LL(0x8dc6c8c807c80ecf), LL(0x32d119196419c87d),
LL(0x923b494939497270), LL(0xaf5fd9d943d9869a),
+ LL(0xf931f2f2eff2c31d), LL(0xdba8e3e3abe34b48),
LL(0xb6b95b5b715be22a), LL(0x0dbc88881a883492),
+ LL(0x293e9a9a529aa4c8), LL(0x4c0b262698262dbe),
LL(0x64bf3232c8328dfa), LL(0x7d59b0b0fab0e94a),
+ LL(0xcff2e9e983e91b6a), LL(0x1e770f0f3c0f7833),
LL(0xb733d5d573d5e6a6), LL(0x1df480803a8074ba),
+ LL(0x6127bebec2be997c), LL(0x87ebcdcd13cd26de),
LL(0x68893434d034bde4), LL(0x903248483d487a75),
+ LL(0xe354ffffdbffab24), LL(0xf48d7a7af57af78f),
LL(0x3d6490907a90f4ea), LL(0xbe9d5f5f615fc23e),
+ LL(0x403d202080201da0), LL(0xd00f6868bd6867d5),
LL(0x34ca1a1a681ad072), LL(0x41b7aeae82ae192c),
+ LL(0x757db4b4eab4c95e), LL(0xa8ce54544d549a19),
LL(0x3b7f93937693ece5), LL(0x442f222288220daa),
+ LL(0xc86364648d6407e9), LL(0xff2af1f1e3f1db12),
LL(0xe6cc7373d173bfa2), LL(0x248212124812905a),
+ LL(0x807a40401d403a5d), LL(0x1048080820084028),
LL(0x9b95c3c32bc356e8), LL(0xc5dfecec97ec337b),
+ LL(0xab4ddbdb4bdb9690), LL(0x5fc0a1a1bea1611f),
LL(0x07918d8d0e8d1c83), LL(0x7ac83d3df43df5c9),
+ LL(0x335b97976697ccf1), LL(0x0000000000000000),
LL(0x83f9cfcf1bcf36d4), LL(0x566e2b2bac2b4587),
+ LL(0xece17676c57697b3), LL(0x19e68282328264b0),
LL(0xb128d6d67fd6fea9), LL(0x36c31b1b6c1bd877),
+ LL(0x7774b5b5eeb5c15b), LL(0x43beafaf86af1129),
LL(0xd41d6a6ab56a77df), LL(0xa0ea50505d50ba0d),
+ LL(0x8a5745450945124c), LL(0xfb38f3f3ebf3cb18),
LL(0x60ad3030c0309df0), LL(0xc3c4efef9bef2b74),
+ LL(0x7eda3f3ffc3fe5c3), LL(0xaac755554955921c),
LL(0x59dba2a2b2a27910), LL(0xc9e9eaea8fea0365),
+ LL(0xca6a656589650fec), LL(0x6903babad2bab968),
LL(0x5e4a2f2fbc2f6593), LL(0x9d8ec0c027c04ee7),
+ LL(0xa160dede5fdebe81), LL(0x38fc1c1c701ce06c),
LL(0xe746fdfdd3fdbb2e), LL(0x9a1f4d4d294d5264),
+ LL(0x397692927292e4e0), LL(0xeafa7575c9758fbc),
LL(0x0c3606061806301e), LL(0x09ae8a8a128a2498),
+ LL(0x794bb2b2f2b2f940), LL(0xd185e6e6bfe66359),
LL(0x1c7e0e0e380e7036), LL(0x3ee71f1f7c1ff863),
+ LL(0xc4556262956237f7), LL(0xb53ad4d477d4eea3),
LL(0x4d81a8a89aa82932), LL(0x315296966296c4f4),
+ LL(0xef62f9f9c3f99b3a), LL(0x97a3c5c533c566f6),
LL(0x4a102525942535b1), LL(0xb2ab59597959f220),
+ LL(0x15d084842a8454ae), LL(0xe4c57272d572b7a7),
LL(0x72ec3939e439d5dd), LL(0x98164c4c2d4c5a61),
+ LL(0xbc945e5e655eca3b), LL(0xf09f7878fd78e785),
LL(0x70e53838e038ddd8), LL(0x05988c8c0a8c1486),
+ LL(0xbf17d1d163d1c6b2), LL(0x57e4a5a5aea5410b),
LL(0xd9a1e2e2afe2434d), LL(0xc24e616199612ff8),
+ LL(0x7b42b3b3f6b3f145), LL(0x42342121842115a5),
LL(0x25089c9c4a9c94d6), LL(0x3cee1e1e781ef066),
+ LL(0x8661434311432252), LL(0x93b1c7c73bc776fc),
LL(0xe54ffcfcd7fcb32b), LL(0x0824040410042014),
+ LL(0xa2e351515951b208), LL(0x2f2599995e99bcc7),
LL(0xda226d6da96d4fc4), LL(0x1a650d0d340d6839),
+ LL(0xe979fafacffa8335), LL(0xa369dfdf5bdfb684),
LL(0xfca97e7ee57ed79b), LL(0x4819242490243db4),
+ LL(0x76fe3b3bec3bc5d7), LL(0x4b9aabab96ab313d),
LL(0x81f0cece1fce3ed1), LL(0x2299111144118855),
+ LL(0x03838f8f068f0c89), LL(0x9c044e4e254e4a6b),
LL(0x7366b7b7e6b7d151), LL(0xcbe0ebeb8beb0b60),
+ LL(0x78c13c3cf03cfdcc), LL(0x1ffd81813e817cbf),
LL(0x354094946a94d4fe), LL(0xf31cf7f7fbf7eb0c),
+ LL(0x6f18b9b9deb9a167), LL(0x268b13134c13985f),
LL(0x58512c2cb02c7d9c), LL(0xbb05d3d36bd3d6b8),
+ LL(0xd38ce7e7bbe76b5c), LL(0xdc396e6ea56e57cb),
LL(0x95aac4c437c46ef3), LL(0x061b03030c03180f),
+ LL(0xacdc565645568a13), LL(0x885e44440d441a49),
LL(0xfea07f7fe17fdf9e), LL(0x4f88a9a99ea92137),
+ LL(0x54672a2aa82a4d82), LL(0x6b0abbbbd6bbb16d),
LL(0x9f87c1c123c146e2), LL(0xa6f153535153a202),
+ LL(0xa572dcdc57dcae8b), LL(0x16530b0b2c0b5827),
LL(0x27019d9d4e9d9cd3), LL(0xd82b6c6cad6c47c1),
+ LL(0x62a43131c43195f5), LL(0xe8f37474cd7487b9),
LL(0xf115f6f6fff6e309), LL(0x8c4c464605460a43),
+ LL(0x45a5acac8aac0926), LL(0x0fb589891e893c97),
LL(0x28b414145014a044), LL(0xdfbae1e1a3e15b42),
+ LL(0x2ca616165816b04e), LL(0x74f73a3ae83acdd2),
LL(0xd2066969b9696fd0), LL(0x124109092409482d),
+ LL(0xe0d77070dd70a7ad), LL(0x716fb6b6e2b6d954),
LL(0xbd1ed0d067d0ceb7), LL(0xc7d6eded93ed3b7e),
+ LL(0x85e2cccc17cc2edb), LL(0x8468424215422a57),
LL(0x2d2c98985a98b4c2), LL(0x55eda4a4aaa4490e),
+ LL(0x50752828a0285d88), LL(0xb8865c5c6d5cda31),
LL(0xed6bf8f8c7f8933f), LL(0x11c28686228644a4),
+};
+
+static const u64 C3[256] = {
+ LL(0x7830d818186018c0), LL(0xaf462623238c2305),
LL(0xf991b8c6c63fc67e), LL(0x6fcdfbe8e887e813),
+ LL(0xa113cb878726874c), LL(0x626d11b8b8dab8a9),
LL(0x0502090101040108), LL(0x6e9e0d4f4f214f42),
+ LL(0xee6c9b3636d836ad), LL(0x0451ffa6a6a2a659),
LL(0xbdb90cd2d26fd2de), LL(0x06f70ef5f5f3f5fb),
+ LL(0x80f2967979f979ef), LL(0xcede306f6fa16f5f),
LL(0xef3f6d91917e91fc), LL(0x07a4f852525552aa),
+ LL(0xfdc04760609d6027), LL(0x766535bcbccabc89),
LL(0xcd2b379b9b569bac), LL(0x8c018a8e8e028e04),
+ LL(0x155bd2a3a3b6a371), LL(0x3c186c0c0c300c60),
LL(0x8af6847b7bf17bff), LL(0xe16a803535d435b5),
+ LL(0x693af51d1d741de8), LL(0x47ddb3e0e0a7e053),
LL(0xacb321d7d77bd7f6), LL(0xed999cc2c22fc25e),
+ LL(0x965c432e2eb82e6d), LL(0x7a96294b4b314b62),
LL(0x21e15dfefedffea3), LL(0x16aed55757415782),
+ LL(0x412abd15155415a8), LL(0xb6eee87777c1779f),
LL(0xeb6e923737dc37a5), LL(0x56d79ee5e5b3e57b),
+ LL(0xd923139f9f469f8c), LL(0x17fd23f0f0e7f0d3),
LL(0x7f94204a4a354a6a), LL(0x95a944dada4fda9e),
+ LL(0x25b0a258587d58fa), LL(0xca8fcfc9c903c906),
LL(0x8d527c2929a42955), LL(0x22145a0a0a280a50),
+ LL(0x4f7f50b1b1feb1e1), LL(0x1a5dc9a0a0baa069),
LL(0xdad6146b6bb16b7f), LL(0xab17d985852e855c),
+ LL(0x73673cbdbdcebd81), LL(0x34ba8f5d5d695dd2),
LL(0x5020901010401080), LL(0x03f507f4f4f7f4f3),
+ LL(0xc08bddcbcb0bcb16), LL(0xc67cd33e3ef83eed),
LL(0x110a2d0505140528), LL(0xe6ce78676781671f),
+ LL(0x53d597e4e4b7e473), LL(0xbb4e0227279c2725),
LL(0x5882734141194132), LL(0x9d0ba78b8b168b2c),
+ LL(0x0153f6a7a7a6a751), LL(0x94fab27d7de97dcf),
LL(0xfb374995956e95dc), LL(0x9fad56d8d847d88e),
+ LL(0x30eb70fbfbcbfb8b), LL(0x71c1cdeeee9fee23),
LL(0x91f8bb7c7ced7cc7), LL(0xe3cc716666856617),
+ LL(0x8ea77bdddd53dda6), LL(0x4b2eaf17175c17b8),
LL(0x468e454747014702), LL(0xdc211a9e9e429e84),
+ LL(0xc589d4caca0fca1e), LL(0x995a582d2db42d75),
LL(0x79632ebfbfc6bf91), LL(0x1b0e3f07071c0738),
+ LL(0x2347acadad8ead01), LL(0x2fb4b05a5a755aea),
LL(0xb51bef838336836c), LL(0xff66b63333cc3385),
+ LL(0xf2c65c636391633f), LL(0x0a04120202080210),
LL(0x384993aaaa92aa39), LL(0xa8e2de7171d971af),
+ LL(0xcf8dc6c8c807c80e), LL(0x7d32d119196419c8),
LL(0x70923b4949394972), LL(0x9aaf5fd9d943d986),
+ LL(0x1df931f2f2eff2c3), LL(0x48dba8e3e3abe34b),
LL(0x2ab6b95b5b715be2), LL(0x920dbc88881a8834),
+ LL(0xc8293e9a9a529aa4), LL(0xbe4c0b262698262d),
LL(0xfa64bf3232c8328d), LL(0x4a7d59b0b0fab0e9),
+ LL(0x6acff2e9e983e91b), LL(0x331e770f0f3c0f78),
LL(0xa6b733d5d573d5e6), LL(0xba1df480803a8074),
+ LL(0x7c6127bebec2be99), LL(0xde87ebcdcd13cd26),
LL(0xe468893434d034bd), LL(0x75903248483d487a),
+ LL(0x24e354ffffdbffab), LL(0x8ff48d7a7af57af7),
LL(0xea3d6490907a90f4), LL(0x3ebe9d5f5f615fc2),
+ LL(0xa0403d202080201d), LL(0xd5d00f6868bd6867),
LL(0x7234ca1a1a681ad0), LL(0x2c41b7aeae82ae19),
+ LL(0x5e757db4b4eab4c9), LL(0x19a8ce54544d549a),
LL(0xe53b7f93937693ec), LL(0xaa442f222288220d),
+ LL(0xe9c86364648d6407), LL(0x12ff2af1f1e3f1db),
LL(0xa2e6cc7373d173bf), LL(0x5a24821212481290),
+ LL(0x5d807a40401d403a), LL(0x2810480808200840),
LL(0xe89b95c3c32bc356), LL(0x7bc5dfecec97ec33),
+ LL(0x90ab4ddbdb4bdb96), LL(0x1f5fc0a1a1bea161),
LL(0x8307918d8d0e8d1c), LL(0xc97ac83d3df43df5),
+ LL(0xf1335b97976697cc), LL(0x0000000000000000),
LL(0xd483f9cfcf1bcf36), LL(0x87566e2b2bac2b45),
+ LL(0xb3ece17676c57697), LL(0xb019e68282328264),
LL(0xa9b128d6d67fd6fe), LL(0x7736c31b1b6c1bd8),
+ LL(0x5b7774b5b5eeb5c1), LL(0x2943beafaf86af11),
LL(0xdfd41d6a6ab56a77), LL(0x0da0ea50505d50ba),
+ LL(0x4c8a574545094512), LL(0x18fb38f3f3ebf3cb),
LL(0xf060ad3030c0309d), LL(0x74c3c4efef9bef2b),
+ LL(0xc37eda3f3ffc3fe5), LL(0x1caac75555495592),
LL(0x1059dba2a2b2a279), LL(0x65c9e9eaea8fea03),
+ LL(0xecca6a656589650f), LL(0x686903babad2bab9),
LL(0x935e4a2f2fbc2f65), LL(0xe79d8ec0c027c04e),
+ LL(0x81a160dede5fdebe), LL(0x6c38fc1c1c701ce0),
LL(0x2ee746fdfdd3fdbb), LL(0x649a1f4d4d294d52),
+ LL(0xe0397692927292e4), LL(0xbceafa7575c9758f),
LL(0x1e0c360606180630), LL(0x9809ae8a8a128a24),
+ LL(0x40794bb2b2f2b2f9), LL(0x59d185e6e6bfe663),
LL(0x361c7e0e0e380e70), LL(0x633ee71f1f7c1ff8),
+ LL(0xf7c4556262956237), LL(0xa3b53ad4d477d4ee),
LL(0x324d81a8a89aa829), LL(0xf4315296966296c4),
+ LL(0x3aef62f9f9c3f99b), LL(0xf697a3c5c533c566),
LL(0xb14a102525942535), LL(0x20b2ab59597959f2),
+ LL(0xae15d084842a8454), LL(0xa7e4c57272d572b7),
LL(0xdd72ec3939e439d5), LL(0x6198164c4c2d4c5a),
+ LL(0x3bbc945e5e655eca), LL(0x85f09f7878fd78e7),
LL(0xd870e53838e038dd), LL(0x8605988c8c0a8c14),
+ LL(0xb2bf17d1d163d1c6), LL(0x0b57e4a5a5aea541),
LL(0x4dd9a1e2e2afe243), LL(0xf8c24e616199612f),
+ LL(0x457b42b3b3f6b3f1), LL(0xa542342121842115),
LL(0xd625089c9c4a9c94), LL(0x663cee1e1e781ef0),
+ LL(0x5286614343114322), LL(0xfc93b1c7c73bc776),
LL(0x2be54ffcfcd7fcb3), LL(0x1408240404100420),
+ LL(0x08a2e351515951b2), LL(0xc72f2599995e99bc),
LL(0xc4da226d6da96d4f), LL(0x391a650d0d340d68),
+ LL(0x35e979fafacffa83), LL(0x84a369dfdf5bdfb6),
LL(0x9bfca97e7ee57ed7), LL(0xb44819242490243d),
+ LL(0xd776fe3b3bec3bc5), LL(0x3d4b9aabab96ab31),
LL(0xd181f0cece1fce3e), LL(0x5522991111441188),
+ LL(0x8903838f8f068f0c), LL(0x6b9c044e4e254e4a),
LL(0x517366b7b7e6b7d1), LL(0x60cbe0ebeb8beb0b),
+ LL(0xcc78c13c3cf03cfd), LL(0xbf1ffd81813e817c),
LL(0xfe354094946a94d4), LL(0x0cf31cf7f7fbf7eb),
+ LL(0x676f18b9b9deb9a1), LL(0x5f268b13134c1398),
LL(0x9c58512c2cb02c7d), LL(0xb8bb05d3d36bd3d6),
+ LL(0x5cd38ce7e7bbe76b), LL(0xcbdc396e6ea56e57),
LL(0xf395aac4c437c46e), LL(0x0f061b03030c0318),
+ LL(0x13acdc565645568a), LL(0x49885e44440d441a),
LL(0x9efea07f7fe17fdf), LL(0x374f88a9a99ea921),
+ LL(0x8254672a2aa82a4d), LL(0x6d6b0abbbbd6bbb1),
LL(0xe29f87c1c123c146), LL(0x02a6f153535153a2),
+ LL(0x8ba572dcdc57dcae), LL(0x2716530b0b2c0b58),
LL(0xd327019d9d4e9d9c), LL(0xc1d82b6c6cad6c47),
+ LL(0xf562a43131c43195), LL(0xb9e8f37474cd7487),
LL(0x09f115f6f6fff6e3), LL(0x438c4c464605460a),
+ LL(0x2645a5acac8aac09), LL(0x970fb589891e893c),
LL(0x4428b414145014a0), LL(0x42dfbae1e1a3e15b),
+ LL(0x4e2ca616165816b0), LL(0xd274f73a3ae83acd),
LL(0xd0d2066969b9696f), LL(0x2d12410909240948),
+ LL(0xade0d77070dd70a7), LL(0x54716fb6b6e2b6d9),
LL(0xb7bd1ed0d067d0ce), LL(0x7ec7d6eded93ed3b),
+ LL(0xdb85e2cccc17cc2e), LL(0x578468424215422a),
LL(0xc22d2c98985a98b4), LL(0x0e55eda4a4aaa449),
+ LL(0x8850752828a0285d), LL(0x31b8865c5c6d5cda),
LL(0x3fed6bf8f8c7f893), LL(0xa411c28686228644),
+};
+
+static const u64 C4[256] = {
+ LL(0xc07830d818186018), LL(0x05af462623238c23),
LL(0x7ef991b8c6c63fc6), LL(0x136fcdfbe8e887e8),
+ LL(0x4ca113cb87872687), LL(0xa9626d11b8b8dab8),
LL(0x0805020901010401), LL(0x426e9e0d4f4f214f),
+ LL(0xadee6c9b3636d836), LL(0x590451ffa6a6a2a6),
LL(0xdebdb90cd2d26fd2), LL(0xfb06f70ef5f5f3f5),
+ LL(0xef80f2967979f979), LL(0x5fcede306f6fa16f),
LL(0xfcef3f6d91917e91), LL(0xaa07a4f852525552),
+ LL(0x27fdc04760609d60), LL(0x89766535bcbccabc),
LL(0xaccd2b379b9b569b), LL(0x048c018a8e8e028e),
+ LL(0x71155bd2a3a3b6a3), LL(0x603c186c0c0c300c),
LL(0xff8af6847b7bf17b), LL(0xb5e16a803535d435),
+ LL(0xe8693af51d1d741d), LL(0x5347ddb3e0e0a7e0),
LL(0xf6acb321d7d77bd7), LL(0x5eed999cc2c22fc2),
+ LL(0x6d965c432e2eb82e), LL(0x627a96294b4b314b),
LL(0xa321e15dfefedffe), LL(0x8216aed557574157),
+ LL(0xa8412abd15155415), LL(0x9fb6eee87777c177),
LL(0xa5eb6e923737dc37), LL(0x7b56d79ee5e5b3e5),
+ LL(0x8cd923139f9f469f), LL(0xd317fd23f0f0e7f0),
LL(0x6a7f94204a4a354a), LL(0x9e95a944dada4fda),
+ LL(0xfa25b0a258587d58), LL(0x06ca8fcfc9c903c9),
LL(0x558d527c2929a429), LL(0x5022145a0a0a280a),
+ LL(0xe14f7f50b1b1feb1), LL(0x691a5dc9a0a0baa0),
LL(0x7fdad6146b6bb16b), LL(0x5cab17d985852e85),
+ LL(0x8173673cbdbdcebd), LL(0xd234ba8f5d5d695d),
LL(0x8050209010104010), LL(0xf303f507f4f4f7f4),
+ LL(0x16c08bddcbcb0bcb), LL(0xedc67cd33e3ef83e),
LL(0x28110a2d05051405), LL(0x1fe6ce7867678167),
+ LL(0x7353d597e4e4b7e4), LL(0x25bb4e0227279c27),
LL(0x3258827341411941), LL(0x2c9d0ba78b8b168b),
+ LL(0x510153f6a7a7a6a7), LL(0xcf94fab27d7de97d),
LL(0xdcfb374995956e95), LL(0x8e9fad56d8d847d8),
+ LL(0x8b30eb70fbfbcbfb), LL(0x2371c1cdeeee9fee),
LL(0xc791f8bb7c7ced7c), LL(0x17e3cc7166668566),
+ LL(0xa68ea77bdddd53dd), LL(0xb84b2eaf17175c17),
LL(0x02468e4547470147), LL(0x84dc211a9e9e429e),
+ LL(0x1ec589d4caca0fca), LL(0x75995a582d2db42d),
LL(0x9179632ebfbfc6bf), LL(0x381b0e3f07071c07),
+ LL(0x012347acadad8ead), LL(0xea2fb4b05a5a755a),
LL(0x6cb51bef83833683), LL(0x85ff66b63333cc33),
+ LL(0x3ff2c65c63639163), LL(0x100a041202020802),
LL(0x39384993aaaa92aa), LL(0xafa8e2de7171d971),
+ LL(0x0ecf8dc6c8c807c8), LL(0xc87d32d119196419),
LL(0x7270923b49493949), LL(0x869aaf5fd9d943d9),
+ LL(0xc31df931f2f2eff2), LL(0x4b48dba8e3e3abe3),
LL(0xe22ab6b95b5b715b), LL(0x34920dbc88881a88),
+ LL(0xa4c8293e9a9a529a), LL(0x2dbe4c0b26269826),
LL(0x8dfa64bf3232c832), LL(0xe94a7d59b0b0fab0),
+ LL(0x1b6acff2e9e983e9), LL(0x78331e770f0f3c0f),
LL(0xe6a6b733d5d573d5), LL(0x74ba1df480803a80),
+ LL(0x997c6127bebec2be), LL(0x26de87ebcdcd13cd),
LL(0xbde468893434d034), LL(0x7a75903248483d48),
+ LL(0xab24e354ffffdbff), LL(0xf78ff48d7a7af57a),
LL(0xf4ea3d6490907a90), LL(0xc23ebe9d5f5f615f),
+ LL(0x1da0403d20208020), LL(0x67d5d00f6868bd68),
LL(0xd07234ca1a1a681a), LL(0x192c41b7aeae82ae),
+ LL(0xc95e757db4b4eab4), LL(0x9a19a8ce54544d54),
LL(0xece53b7f93937693), LL(0x0daa442f22228822),
+ LL(0x07e9c86364648d64), LL(0xdb12ff2af1f1e3f1),
LL(0xbfa2e6cc7373d173), LL(0x905a248212124812),
+ LL(0x3a5d807a40401d40), LL(0x4028104808082008),
LL(0x56e89b95c3c32bc3), LL(0x337bc5dfecec97ec),
+ LL(0x9690ab4ddbdb4bdb), LL(0x611f5fc0a1a1bea1),
LL(0x1c8307918d8d0e8d), LL(0xf5c97ac83d3df43d),
+ LL(0xccf1335b97976697), LL(0x0000000000000000),
LL(0x36d483f9cfcf1bcf), LL(0x4587566e2b2bac2b),
+ LL(0x97b3ece17676c576), LL(0x64b019e682823282),
LL(0xfea9b128d6d67fd6), LL(0xd87736c31b1b6c1b),
+ LL(0xc15b7774b5b5eeb5), LL(0x112943beafaf86af),
LL(0x77dfd41d6a6ab56a), LL(0xba0da0ea50505d50),
+ LL(0x124c8a5745450945), LL(0xcb18fb38f3f3ebf3),
LL(0x9df060ad3030c030), LL(0x2b74c3c4efef9bef),
+ LL(0xe5c37eda3f3ffc3f), LL(0x921caac755554955),
LL(0x791059dba2a2b2a2), LL(0x0365c9e9eaea8fea),
+ LL(0x0fecca6a65658965), LL(0xb9686903babad2ba),
LL(0x65935e4a2f2fbc2f), LL(0x4ee79d8ec0c027c0),
+ LL(0xbe81a160dede5fde), LL(0xe06c38fc1c1c701c),
LL(0xbb2ee746fdfdd3fd), LL(0x52649a1f4d4d294d),
+ LL(0xe4e0397692927292), LL(0x8fbceafa7575c975),
LL(0x301e0c3606061806), LL(0x249809ae8a8a128a),
+ LL(0xf940794bb2b2f2b2), LL(0x6359d185e6e6bfe6),
LL(0x70361c7e0e0e380e), LL(0xf8633ee71f1f7c1f),
+ LL(0x37f7c45562629562), LL(0xeea3b53ad4d477d4),
LL(0x29324d81a8a89aa8), LL(0xc4f4315296966296),
+ LL(0x9b3aef62f9f9c3f9), LL(0x66f697a3c5c533c5),
LL(0x35b14a1025259425), LL(0xf220b2ab59597959),
+ LL(0x54ae15d084842a84), LL(0xb7a7e4c57272d572),
LL(0xd5dd72ec3939e439), LL(0x5a6198164c4c2d4c),
+ LL(0xca3bbc945e5e655e), LL(0xe785f09f7878fd78),
LL(0xddd870e53838e038), LL(0x148605988c8c0a8c),
+ LL(0xc6b2bf17d1d163d1), LL(0x410b57e4a5a5aea5),
LL(0x434dd9a1e2e2afe2), LL(0x2ff8c24e61619961),
+ LL(0xf1457b42b3b3f6b3), LL(0x15a5423421218421),
LL(0x94d625089c9c4a9c), LL(0xf0663cee1e1e781e),
+ LL(0x2252866143431143), LL(0x76fc93b1c7c73bc7),
LL(0xb32be54ffcfcd7fc), LL(0x2014082404041004),
+ LL(0xb208a2e351515951), LL(0xbcc72f2599995e99),
LL(0x4fc4da226d6da96d), LL(0x68391a650d0d340d),
+ LL(0x8335e979fafacffa), LL(0xb684a369dfdf5bdf),
LL(0xd79bfca97e7ee57e), LL(0x3db4481924249024),
+ LL(0xc5d776fe3b3bec3b), LL(0x313d4b9aabab96ab),
LL(0x3ed181f0cece1fce), LL(0x8855229911114411),
+ LL(0x0c8903838f8f068f), LL(0x4a6b9c044e4e254e),
LL(0xd1517366b7b7e6b7), LL(0x0b60cbe0ebeb8beb),
+ LL(0xfdcc78c13c3cf03c), LL(0x7cbf1ffd81813e81),
LL(0xd4fe354094946a94), LL(0xeb0cf31cf7f7fbf7),
+ LL(0xa1676f18b9b9deb9), LL(0x985f268b13134c13),
LL(0x7d9c58512c2cb02c), LL(0xd6b8bb05d3d36bd3),
+ LL(0x6b5cd38ce7e7bbe7), LL(0x57cbdc396e6ea56e),
LL(0x6ef395aac4c437c4), LL(0x180f061b03030c03),
+ LL(0x8a13acdc56564556), LL(0x1a49885e44440d44),
LL(0xdf9efea07f7fe17f), LL(0x21374f88a9a99ea9),
+ LL(0x4d8254672a2aa82a), LL(0xb16d6b0abbbbd6bb),
LL(0x46e29f87c1c123c1), LL(0xa202a6f153535153),
+ LL(0xae8ba572dcdc57dc), LL(0x582716530b0b2c0b),
LL(0x9cd327019d9d4e9d), LL(0x47c1d82b6c6cad6c),
+ LL(0x95f562a43131c431), LL(0x87b9e8f37474cd74),
LL(0xe309f115f6f6fff6), LL(0x0a438c4c46460546),
+ LL(0x092645a5acac8aac), LL(0x3c970fb589891e89),
LL(0xa04428b414145014), LL(0x5b42dfbae1e1a3e1),
+ LL(0xb04e2ca616165816), LL(0xcdd274f73a3ae83a),
LL(0x6fd0d2066969b969), LL(0x482d124109092409),
+ LL(0xa7ade0d77070dd70), LL(0xd954716fb6b6e2b6),
LL(0xceb7bd1ed0d067d0), LL(0x3b7ec7d6eded93ed),
+ LL(0x2edb85e2cccc17cc), LL(0x2a57846842421542),
LL(0xb4c22d2c98985a98), LL(0x490e55eda4a4aaa4),
+ LL(0x5d8850752828a028), LL(0xda31b8865c5c6d5c),
LL(0x933fed6bf8f8c7f8), LL(0x44a411c286862286),
+};
+
+static const u64 C5[256] = {
+ LL(0x18c07830d8181860), LL(0x2305af462623238c),
LL(0xc67ef991b8c6c63f), LL(0xe8136fcdfbe8e887),
+ LL(0x874ca113cb878726), LL(0xb8a9626d11b8b8da),
LL(0x0108050209010104), LL(0x4f426e9e0d4f4f21),
+ LL(0x36adee6c9b3636d8), LL(0xa6590451ffa6a6a2),
LL(0xd2debdb90cd2d26f), LL(0xf5fb06f70ef5f5f3),
+ LL(0x79ef80f2967979f9), LL(0x6f5fcede306f6fa1),
LL(0x91fcef3f6d91917e), LL(0x52aa07a4f8525255),
+ LL(0x6027fdc04760609d), LL(0xbc89766535bcbcca),
LL(0x9baccd2b379b9b56), LL(0x8e048c018a8e8e02),
+ LL(0xa371155bd2a3a3b6), LL(0x0c603c186c0c0c30),
LL(0x7bff8af6847b7bf1), LL(0x35b5e16a803535d4),
+ LL(0x1de8693af51d1d74), LL(0xe05347ddb3e0e0a7),
LL(0xd7f6acb321d7d77b), LL(0xc25eed999cc2c22f),
+ LL(0x2e6d965c432e2eb8), LL(0x4b627a96294b4b31),
LL(0xfea321e15dfefedf), LL(0x578216aed5575741),
+ LL(0x15a8412abd151554), LL(0x779fb6eee87777c1),
LL(0x37a5eb6e923737dc), LL(0xe57b56d79ee5e5b3),
+ LL(0x9f8cd923139f9f46), LL(0xf0d317fd23f0f0e7),
LL(0x4a6a7f94204a4a35), LL(0xda9e95a944dada4f),
+ LL(0x58fa25b0a258587d), LL(0xc906ca8fcfc9c903),
LL(0x29558d527c2929a4), LL(0x0a5022145a0a0a28),
+ LL(0xb1e14f7f50b1b1fe), LL(0xa0691a5dc9a0a0ba),
LL(0x6b7fdad6146b6bb1), LL(0x855cab17d985852e),
+ LL(0xbd8173673cbdbdce), LL(0x5dd234ba8f5d5d69),
LL(0x1080502090101040), LL(0xf4f303f507f4f4f7),
+ LL(0xcb16c08bddcbcb0b), LL(0x3eedc67cd33e3ef8),
LL(0x0528110a2d050514), LL(0x671fe6ce78676781),
+ LL(0xe47353d597e4e4b7), LL(0x2725bb4e0227279c),
LL(0x4132588273414119), LL(0x8b2c9d0ba78b8b16),
+ LL(0xa7510153f6a7a7a6), LL(0x7dcf94fab27d7de9),
LL(0x95dcfb374995956e), LL(0xd88e9fad56d8d847),
+ LL(0xfb8b30eb70fbfbcb), LL(0xee2371c1cdeeee9f),
LL(0x7cc791f8bb7c7ced), LL(0x6617e3cc71666685),
+ LL(0xdda68ea77bdddd53), LL(0x17b84b2eaf17175c),
LL(0x4702468e45474701), LL(0x9e84dc211a9e9e42),
+ LL(0xca1ec589d4caca0f), LL(0x2d75995a582d2db4),
LL(0xbf9179632ebfbfc6), LL(0x07381b0e3f07071c),
+ LL(0xad012347acadad8e), LL(0x5aea2fb4b05a5a75),
LL(0x836cb51bef838336), LL(0x3385ff66b63333cc),
+ LL(0x633ff2c65c636391), LL(0x02100a0412020208),
LL(0xaa39384993aaaa92), LL(0x71afa8e2de7171d9),
+ LL(0xc80ecf8dc6c8c807), LL(0x19c87d32d1191964),
LL(0x497270923b494939), LL(0xd9869aaf5fd9d943),
+ LL(0xf2c31df931f2f2ef), LL(0xe34b48dba8e3e3ab),
LL(0x5be22ab6b95b5b71), LL(0x8834920dbc88881a),
+ LL(0x9aa4c8293e9a9a52), LL(0x262dbe4c0b262698),
LL(0x328dfa64bf3232c8), LL(0xb0e94a7d59b0b0fa),
+ LL(0xe91b6acff2e9e983), LL(0x0f78331e770f0f3c),
LL(0xd5e6a6b733d5d573), LL(0x8074ba1df480803a),
+ LL(0xbe997c6127bebec2), LL(0xcd26de87ebcdcd13),
LL(0x34bde468893434d0), LL(0x487a75903248483d),
+ LL(0xffab24e354ffffdb), LL(0x7af78ff48d7a7af5),
LL(0x90f4ea3d6490907a), LL(0x5fc23ebe9d5f5f61),
+ LL(0x201da0403d202080), LL(0x6867d5d00f6868bd),
LL(0x1ad07234ca1a1a68), LL(0xae192c41b7aeae82),
+ LL(0xb4c95e757db4b4ea), LL(0x549a19a8ce54544d),
LL(0x93ece53b7f939376), LL(0x220daa442f222288),
+ LL(0x6407e9c86364648d), LL(0xf1db12ff2af1f1e3),
LL(0x73bfa2e6cc7373d1), LL(0x12905a2482121248),
+ LL(0x403a5d807a40401d), LL(0x0840281048080820),
LL(0xc356e89b95c3c32b), LL(0xec337bc5dfecec97),
+ LL(0xdb9690ab4ddbdb4b), LL(0xa1611f5fc0a1a1be),
LL(0x8d1c8307918d8d0e), LL(0x3df5c97ac83d3df4),
+ LL(0x97ccf1335b979766), LL(0x0000000000000000),
LL(0xcf36d483f9cfcf1b), LL(0x2b4587566e2b2bac),
+ LL(0x7697b3ece17676c5), LL(0x8264b019e6828232),
LL(0xd6fea9b128d6d67f), LL(0x1bd87736c31b1b6c),
+ LL(0xb5c15b7774b5b5ee), LL(0xaf112943beafaf86),
LL(0x6a77dfd41d6a6ab5), LL(0x50ba0da0ea50505d),
+ LL(0x45124c8a57454509), LL(0xf3cb18fb38f3f3eb),
LL(0x309df060ad3030c0), LL(0xef2b74c3c4efef9b),
+ LL(0x3fe5c37eda3f3ffc), LL(0x55921caac7555549),
LL(0xa2791059dba2a2b2), LL(0xea0365c9e9eaea8f),
+ LL(0x650fecca6a656589), LL(0xbab9686903babad2),
LL(0x2f65935e4a2f2fbc), LL(0xc04ee79d8ec0c027),
+ LL(0xdebe81a160dede5f), LL(0x1ce06c38fc1c1c70),
LL(0xfdbb2ee746fdfdd3), LL(0x4d52649a1f4d4d29),
+ LL(0x92e4e03976929272), LL(0x758fbceafa7575c9),
LL(0x06301e0c36060618), LL(0x8a249809ae8a8a12),
+ LL(0xb2f940794bb2b2f2), LL(0xe66359d185e6e6bf),
LL(0x0e70361c7e0e0e38), LL(0x1ff8633ee71f1f7c),
+ LL(0x6237f7c455626295), LL(0xd4eea3b53ad4d477),
LL(0xa829324d81a8a89a), LL(0x96c4f43152969662),
+ LL(0xf99b3aef62f9f9c3), LL(0xc566f697a3c5c533),
LL(0x2535b14a10252594), LL(0x59f220b2ab595979),
+ LL(0x8454ae15d084842a), LL(0x72b7a7e4c57272d5),
LL(0x39d5dd72ec3939e4), LL(0x4c5a6198164c4c2d),
+ LL(0x5eca3bbc945e5e65), LL(0x78e785f09f7878fd),
LL(0x38ddd870e53838e0), LL(0x8c148605988c8c0a),
+ LL(0xd1c6b2bf17d1d163), LL(0xa5410b57e4a5a5ae),
LL(0xe2434dd9a1e2e2af), LL(0x612ff8c24e616199),
+ LL(0xb3f1457b42b3b3f6), LL(0x2115a54234212184),
LL(0x9c94d625089c9c4a), LL(0x1ef0663cee1e1e78),
+ LL(0x4322528661434311), LL(0xc776fc93b1c7c73b),
LL(0xfcb32be54ffcfcd7), LL(0x0420140824040410),
+ LL(0x51b208a2e3515159), LL(0x99bcc72f2599995e),
LL(0x6d4fc4da226d6da9), LL(0x0d68391a650d0d34),
+ LL(0xfa8335e979fafacf), LL(0xdfb684a369dfdf5b),
LL(0x7ed79bfca97e7ee5), LL(0x243db44819242490),
+ LL(0x3bc5d776fe3b3bec), LL(0xab313d4b9aabab96),
LL(0xce3ed181f0cece1f), LL(0x1188552299111144),
+ LL(0x8f0c8903838f8f06), LL(0x4e4a6b9c044e4e25),
LL(0xb7d1517366b7b7e6), LL(0xeb0b60cbe0ebeb8b),
+ LL(0x3cfdcc78c13c3cf0), LL(0x817cbf1ffd81813e),
LL(0x94d4fe354094946a), LL(0xf7eb0cf31cf7f7fb),
+ LL(0xb9a1676f18b9b9de), LL(0x13985f268b13134c),
LL(0x2c7d9c58512c2cb0), LL(0xd3d6b8bb05d3d36b),
+ LL(0xe76b5cd38ce7e7bb), LL(0x6e57cbdc396e6ea5),
LL(0xc46ef395aac4c437), LL(0x03180f061b03030c),
+ LL(0x568a13acdc565645), LL(0x441a49885e44440d),
LL(0x7fdf9efea07f7fe1), LL(0xa921374f88a9a99e),
+ LL(0x2a4d8254672a2aa8), LL(0xbbb16d6b0abbbbd6),
LL(0xc146e29f87c1c123), LL(0x53a202a6f1535351),
+ LL(0xdcae8ba572dcdc57), LL(0x0b582716530b0b2c),
LL(0x9d9cd327019d9d4e), LL(0x6c47c1d82b6c6cad),
+ LL(0x3195f562a43131c4), LL(0x7487b9e8f37474cd),
LL(0xf6e309f115f6f6ff), LL(0x460a438c4c464605),
+ LL(0xac092645a5acac8a), LL(0x893c970fb589891e),
LL(0x14a04428b4141450), LL(0xe15b42dfbae1e1a3),
+ LL(0x16b04e2ca6161658), LL(0x3acdd274f73a3ae8),
LL(0x696fd0d2066969b9), LL(0x09482d1241090924),
+ LL(0x70a7ade0d77070dd), LL(0xb6d954716fb6b6e2),
LL(0xd0ceb7bd1ed0d067), LL(0xed3b7ec7d6eded93),
+ LL(0xcc2edb85e2cccc17), LL(0x422a578468424215),
LL(0x98b4c22d2c98985a), LL(0xa4490e55eda4a4aa),
+ LL(0x285d8850752828a0), LL(0x5cda31b8865c5c6d),
LL(0xf8933fed6bf8f8c7), LL(0x8644a411c2868622),
+};
+
+static const u64 C6[256] = {
+ LL(0x6018c07830d81818), LL(0x8c2305af46262323),
LL(0x3fc67ef991b8c6c6), LL(0x87e8136fcdfbe8e8),
+ LL(0x26874ca113cb8787), LL(0xdab8a9626d11b8b8),
LL(0x0401080502090101), LL(0x214f426e9e0d4f4f),
+ LL(0xd836adee6c9b3636), LL(0xa2a6590451ffa6a6),
LL(0x6fd2debdb90cd2d2), LL(0xf3f5fb06f70ef5f5),
+ LL(0xf979ef80f2967979), LL(0xa16f5fcede306f6f),
LL(0x7e91fcef3f6d9191), LL(0x5552aa07a4f85252),
+ LL(0x9d6027fdc0476060), LL(0xcabc89766535bcbc),
LL(0x569baccd2b379b9b), LL(0x028e048c018a8e8e),
+ LL(0xb6a371155bd2a3a3), LL(0x300c603c186c0c0c),
LL(0xf17bff8af6847b7b), LL(0xd435b5e16a803535),
+ LL(0x741de8693af51d1d), LL(0xa7e05347ddb3e0e0),
LL(0x7bd7f6acb321d7d7), LL(0x2fc25eed999cc2c2),
+ LL(0xb82e6d965c432e2e), LL(0x314b627a96294b4b),
LL(0xdffea321e15dfefe), LL(0x41578216aed55757),
+ LL(0x5415a8412abd1515), LL(0xc1779fb6eee87777),
LL(0xdc37a5eb6e923737), LL(0xb3e57b56d79ee5e5),
+ LL(0x469f8cd923139f9f), LL(0xe7f0d317fd23f0f0),
LL(0x354a6a7f94204a4a), LL(0x4fda9e95a944dada),
+ LL(0x7d58fa25b0a25858), LL(0x03c906ca8fcfc9c9),
LL(0xa429558d527c2929), LL(0x280a5022145a0a0a),
+ LL(0xfeb1e14f7f50b1b1), LL(0xbaa0691a5dc9a0a0),
LL(0xb16b7fdad6146b6b), LL(0x2e855cab17d98585),
+ LL(0xcebd8173673cbdbd), LL(0x695dd234ba8f5d5d),
LL(0x4010805020901010), LL(0xf7f4f303f507f4f4),
+ LL(0x0bcb16c08bddcbcb), LL(0xf83eedc67cd33e3e),
LL(0x140528110a2d0505), LL(0x81671fe6ce786767),
+ LL(0xb7e47353d597e4e4), LL(0x9c2725bb4e022727),
LL(0x1941325882734141), LL(0x168b2c9d0ba78b8b),
+ LL(0xa6a7510153f6a7a7), LL(0xe97dcf94fab27d7d),
LL(0x6e95dcfb37499595), LL(0x47d88e9fad56d8d8),
+ LL(0xcbfb8b30eb70fbfb), LL(0x9fee2371c1cdeeee),
LL(0xed7cc791f8bb7c7c), LL(0x856617e3cc716666),
+ LL(0x53dda68ea77bdddd), LL(0x5c17b84b2eaf1717),
LL(0x014702468e454747), LL(0x429e84dc211a9e9e),
+ LL(0x0fca1ec589d4caca), LL(0xb42d75995a582d2d),
LL(0xc6bf9179632ebfbf), LL(0x1c07381b0e3f0707),
+ LL(0x8ead012347acadad), LL(0x755aea2fb4b05a5a),
LL(0x36836cb51bef8383), LL(0xcc3385ff66b63333),
+ LL(0x91633ff2c65c6363), LL(0x0802100a04120202),
LL(0x92aa39384993aaaa), LL(0xd971afa8e2de7171),
+ LL(0x07c80ecf8dc6c8c8), LL(0x6419c87d32d11919),
LL(0x39497270923b4949), LL(0x43d9869aaf5fd9d9),
+ LL(0xeff2c31df931f2f2), LL(0xabe34b48dba8e3e3),
LL(0x715be22ab6b95b5b), LL(0x1a8834920dbc8888),
+ LL(0x529aa4c8293e9a9a), LL(0x98262dbe4c0b2626),
LL(0xc8328dfa64bf3232), LL(0xfab0e94a7d59b0b0),
+ LL(0x83e91b6acff2e9e9), LL(0x3c0f78331e770f0f),
LL(0x73d5e6a6b733d5d5), LL(0x3a8074ba1df48080),
+ LL(0xc2be997c6127bebe), LL(0x13cd26de87ebcdcd),
LL(0xd034bde468893434), LL(0x3d487a7590324848),
+ LL(0xdbffab24e354ffff), LL(0xf57af78ff48d7a7a),
LL(0x7a90f4ea3d649090), LL(0x615fc23ebe9d5f5f),
+ LL(0x80201da0403d2020), LL(0xbd6867d5d00f6868),
LL(0x681ad07234ca1a1a), LL(0x82ae192c41b7aeae),
+ LL(0xeab4c95e757db4b4), LL(0x4d549a19a8ce5454),
LL(0x7693ece53b7f9393), LL(0x88220daa442f2222),
+ LL(0x8d6407e9c8636464), LL(0xe3f1db12ff2af1f1),
LL(0xd173bfa2e6cc7373), LL(0x4812905a24821212),
+ LL(0x1d403a5d807a4040), LL(0x2008402810480808),
LL(0x2bc356e89b95c3c3), LL(0x97ec337bc5dfecec),
+ LL(0x4bdb9690ab4ddbdb), LL(0xbea1611f5fc0a1a1),
LL(0x0e8d1c8307918d8d), LL(0xf43df5c97ac83d3d),
+ LL(0x6697ccf1335b9797), LL(0x0000000000000000),
LL(0x1bcf36d483f9cfcf), LL(0xac2b4587566e2b2b),
+ LL(0xc57697b3ece17676), LL(0x328264b019e68282),
LL(0x7fd6fea9b128d6d6), LL(0x6c1bd87736c31b1b),
+ LL(0xeeb5c15b7774b5b5), LL(0x86af112943beafaf),
LL(0xb56a77dfd41d6a6a), LL(0x5d50ba0da0ea5050),
+ LL(0x0945124c8a574545), LL(0xebf3cb18fb38f3f3),
LL(0xc0309df060ad3030), LL(0x9bef2b74c3c4efef),
+ LL(0xfc3fe5c37eda3f3f), LL(0x4955921caac75555),
LL(0xb2a2791059dba2a2), LL(0x8fea0365c9e9eaea),
+ LL(0x89650fecca6a6565), LL(0xd2bab9686903baba),
LL(0xbc2f65935e4a2f2f), LL(0x27c04ee79d8ec0c0),
+ LL(0x5fdebe81a160dede), LL(0x701ce06c38fc1c1c),
LL(0xd3fdbb2ee746fdfd), LL(0x294d52649a1f4d4d),
+ LL(0x7292e4e039769292), LL(0xc9758fbceafa7575),
LL(0x1806301e0c360606), LL(0x128a249809ae8a8a),
+ LL(0xf2b2f940794bb2b2), LL(0xbfe66359d185e6e6),
LL(0x380e70361c7e0e0e), LL(0x7c1ff8633ee71f1f),
+ LL(0x956237f7c4556262), LL(0x77d4eea3b53ad4d4),
LL(0x9aa829324d81a8a8), LL(0x6296c4f431529696),
+ LL(0xc3f99b3aef62f9f9), LL(0x33c566f697a3c5c5),
LL(0x942535b14a102525), LL(0x7959f220b2ab5959),
+ LL(0x2a8454ae15d08484), LL(0xd572b7a7e4c57272),
LL(0xe439d5dd72ec3939), LL(0x2d4c5a6198164c4c),
+ LL(0x655eca3bbc945e5e), LL(0xfd78e785f09f7878),
LL(0xe038ddd870e53838), LL(0x0a8c148605988c8c),
+ LL(0x63d1c6b2bf17d1d1), LL(0xaea5410b57e4a5a5),
LL(0xafe2434dd9a1e2e2), LL(0x99612ff8c24e6161),
+ LL(0xf6b3f1457b42b3b3), LL(0x842115a542342121),
LL(0x4a9c94d625089c9c), LL(0x781ef0663cee1e1e),
+ LL(0x1143225286614343), LL(0x3bc776fc93b1c7c7),
LL(0xd7fcb32be54ffcfc), LL(0x1004201408240404),
+ LL(0x5951b208a2e35151), LL(0x5e99bcc72f259999),
LL(0xa96d4fc4da226d6d), LL(0x340d68391a650d0d),
+ LL(0xcffa8335e979fafa), LL(0x5bdfb684a369dfdf),
LL(0xe57ed79bfca97e7e), LL(0x90243db448192424),
+ LL(0xec3bc5d776fe3b3b), LL(0x96ab313d4b9aabab),
LL(0x1fce3ed181f0cece), LL(0x4411885522991111),
+ LL(0x068f0c8903838f8f), LL(0x254e4a6b9c044e4e),
LL(0xe6b7d1517366b7b7), LL(0x8beb0b60cbe0ebeb),
+ LL(0xf03cfdcc78c13c3c), LL(0x3e817cbf1ffd8181),
LL(0x6a94d4fe35409494), LL(0xfbf7eb0cf31cf7f7),
+ LL(0xdeb9a1676f18b9b9), LL(0x4c13985f268b1313),
LL(0xb02c7d9c58512c2c), LL(0x6bd3d6b8bb05d3d3),
+ LL(0xbbe76b5cd38ce7e7), LL(0xa56e57cbdc396e6e),
LL(0x37c46ef395aac4c4), LL(0x0c03180f061b0303),
+ LL(0x45568a13acdc5656), LL(0x0d441a49885e4444),
LL(0xe17fdf9efea07f7f), LL(0x9ea921374f88a9a9),
+ LL(0xa82a4d8254672a2a), LL(0xd6bbb16d6b0abbbb),
LL(0x23c146e29f87c1c1), LL(0x5153a202a6f15353),
+ LL(0x57dcae8ba572dcdc), LL(0x2c0b582716530b0b),
LL(0x4e9d9cd327019d9d), LL(0xad6c47c1d82b6c6c),
+ LL(0xc43195f562a43131), LL(0xcd7487b9e8f37474),
LL(0xfff6e309f115f6f6), LL(0x05460a438c4c4646),
+ LL(0x8aac092645a5acac), LL(0x1e893c970fb58989),
LL(0x5014a04428b41414), LL(0xa3e15b42dfbae1e1),
+ LL(0x5816b04e2ca61616), LL(0xe83acdd274f73a3a),
LL(0xb9696fd0d2066969), LL(0x2409482d12410909),
+ LL(0xdd70a7ade0d77070), LL(0xe2b6d954716fb6b6),
LL(0x67d0ceb7bd1ed0d0), LL(0x93ed3b7ec7d6eded),
+ LL(0x17cc2edb85e2cccc), LL(0x15422a5784684242),
LL(0x5a98b4c22d2c9898), LL(0xaaa4490e55eda4a4),
+ LL(0xa0285d8850752828), LL(0x6d5cda31b8865c5c),
LL(0xc7f8933fed6bf8f8), LL(0x228644a411c28686),
+};
+
+static const u64 C7[256] = {
+ LL(0x186018c07830d818), LL(0x238c2305af462623),
LL(0xc63fc67ef991b8c6), LL(0xe887e8136fcdfbe8),
+ LL(0x8726874ca113cb87), LL(0xb8dab8a9626d11b8),
LL(0x0104010805020901), LL(0x4f214f426e9e0d4f),
+ LL(0x36d836adee6c9b36), LL(0xa6a2a6590451ffa6),
LL(0xd26fd2debdb90cd2), LL(0xf5f3f5fb06f70ef5),
+ LL(0x79f979ef80f29679), LL(0x6fa16f5fcede306f),
LL(0x917e91fcef3f6d91), LL(0x525552aa07a4f852),
+ LL(0x609d6027fdc04760), LL(0xbccabc89766535bc),
LL(0x9b569baccd2b379b), LL(0x8e028e048c018a8e),
+ LL(0xa3b6a371155bd2a3), LL(0x0c300c603c186c0c),
LL(0x7bf17bff8af6847b), LL(0x35d435b5e16a8035),
+ LL(0x1d741de8693af51d), LL(0xe0a7e05347ddb3e0),
LL(0xd77bd7f6acb321d7), LL(0xc22fc25eed999cc2),
+ LL(0x2eb82e6d965c432e), LL(0x4b314b627a96294b),
LL(0xfedffea321e15dfe), LL(0x5741578216aed557),
+ LL(0x155415a8412abd15), LL(0x77c1779fb6eee877),
LL(0x37dc37a5eb6e9237), LL(0xe5b3e57b56d79ee5),
+ LL(0x9f469f8cd923139f), LL(0xf0e7f0d317fd23f0),
LL(0x4a354a6a7f94204a), LL(0xda4fda9e95a944da),
+ LL(0x587d58fa25b0a258), LL(0xc903c906ca8fcfc9),
LL(0x29a429558d527c29), LL(0x0a280a5022145a0a),
+ LL(0xb1feb1e14f7f50b1), LL(0xa0baa0691a5dc9a0),
LL(0x6bb16b7fdad6146b), LL(0x852e855cab17d985),
+ LL(0xbdcebd8173673cbd), LL(0x5d695dd234ba8f5d),
LL(0x1040108050209010), LL(0xf4f7f4f303f507f4),
+ LL(0xcb0bcb16c08bddcb), LL(0x3ef83eedc67cd33e),
LL(0x05140528110a2d05), LL(0x6781671fe6ce7867),
+ LL(0xe4b7e47353d597e4), LL(0x279c2725bb4e0227),
LL(0x4119413258827341), LL(0x8b168b2c9d0ba78b),
+ LL(0xa7a6a7510153f6a7), LL(0x7de97dcf94fab27d),
LL(0x956e95dcfb374995), LL(0xd847d88e9fad56d8),
+ LL(0xfbcbfb8b30eb70fb), LL(0xee9fee2371c1cdee),
LL(0x7ced7cc791f8bb7c), LL(0x66856617e3cc7166),
+ LL(0xdd53dda68ea77bdd), LL(0x175c17b84b2eaf17),
LL(0x47014702468e4547), LL(0x9e429e84dc211a9e),
+ LL(0xca0fca1ec589d4ca), LL(0x2db42d75995a582d),
LL(0xbfc6bf9179632ebf), LL(0x071c07381b0e3f07),
+ LL(0xad8ead012347acad), LL(0x5a755aea2fb4b05a),
LL(0x8336836cb51bef83), LL(0x33cc3385ff66b633),
+ LL(0x6391633ff2c65c63), LL(0x020802100a041202),
LL(0xaa92aa39384993aa), LL(0x71d971afa8e2de71),
+ LL(0xc807c80ecf8dc6c8), LL(0x196419c87d32d119),
LL(0x4939497270923b49), LL(0xd943d9869aaf5fd9),
+ LL(0xf2eff2c31df931f2), LL(0xe3abe34b48dba8e3),
LL(0x5b715be22ab6b95b), LL(0x881a8834920dbc88),
+ LL(0x9a529aa4c8293e9a), LL(0x2698262dbe4c0b26),
LL(0x32c8328dfa64bf32), LL(0xb0fab0e94a7d59b0),
+ LL(0xe983e91b6acff2e9), LL(0x0f3c0f78331e770f),
LL(0xd573d5e6a6b733d5), LL(0x803a8074ba1df480),
+ LL(0xbec2be997c6127be), LL(0xcd13cd26de87ebcd),
LL(0x34d034bde4688934), LL(0x483d487a75903248),
+ LL(0xffdbffab24e354ff), LL(0x7af57af78ff48d7a),
LL(0x907a90f4ea3d6490), LL(0x5f615fc23ebe9d5f),
+ LL(0x2080201da0403d20), LL(0x68bd6867d5d00f68),
LL(0x1a681ad07234ca1a), LL(0xae82ae192c41b7ae),
+ LL(0xb4eab4c95e757db4), LL(0x544d549a19a8ce54),
LL(0x937693ece53b7f93), LL(0x2288220daa442f22),
+ LL(0x648d6407e9c86364), LL(0xf1e3f1db12ff2af1),
LL(0x73d173bfa2e6cc73), LL(0x124812905a248212),
+ LL(0x401d403a5d807a40), LL(0x0820084028104808),
LL(0xc32bc356e89b95c3), LL(0xec97ec337bc5dfec),
+ LL(0xdb4bdb9690ab4ddb), LL(0xa1bea1611f5fc0a1),
LL(0x8d0e8d1c8307918d), LL(0x3df43df5c97ac83d),
+ LL(0x976697ccf1335b97), LL(0x0000000000000000),
LL(0xcf1bcf36d483f9cf), LL(0x2bac2b4587566e2b),
+ LL(0x76c57697b3ece176), LL(0x82328264b019e682),
LL(0xd67fd6fea9b128d6), LL(0x1b6c1bd87736c31b),
+ LL(0xb5eeb5c15b7774b5), LL(0xaf86af112943beaf),
LL(0x6ab56a77dfd41d6a), LL(0x505d50ba0da0ea50),
+ LL(0x450945124c8a5745), LL(0xf3ebf3cb18fb38f3),
LL(0x30c0309df060ad30), LL(0xef9bef2b74c3c4ef),
+ LL(0x3ffc3fe5c37eda3f), LL(0x554955921caac755),
LL(0xa2b2a2791059dba2), LL(0xea8fea0365c9e9ea),
+ LL(0x6589650fecca6a65), LL(0xbad2bab9686903ba),
LL(0x2fbc2f65935e4a2f), LL(0xc027c04ee79d8ec0),
+ LL(0xde5fdebe81a160de), LL(0x1c701ce06c38fc1c),
LL(0xfdd3fdbb2ee746fd), LL(0x4d294d52649a1f4d),
+ LL(0x927292e4e0397692), LL(0x75c9758fbceafa75),
LL(0x061806301e0c3606), LL(0x8a128a249809ae8a),
+ LL(0xb2f2b2f940794bb2), LL(0xe6bfe66359d185e6),
LL(0x0e380e70361c7e0e), LL(0x1f7c1ff8633ee71f),
+ LL(0x62956237f7c45562), LL(0xd477d4eea3b53ad4),
LL(0xa89aa829324d81a8), LL(0x966296c4f4315296),
+ LL(0xf9c3f99b3aef62f9), LL(0xc533c566f697a3c5),
LL(0x25942535b14a1025), LL(0x597959f220b2ab59),
+ LL(0x842a8454ae15d084), LL(0x72d572b7a7e4c572),
LL(0x39e439d5dd72ec39), LL(0x4c2d4c5a6198164c),
+ LL(0x5e655eca3bbc945e), LL(0x78fd78e785f09f78),
LL(0x38e038ddd870e538), LL(0x8c0a8c148605988c),
+ LL(0xd163d1c6b2bf17d1), LL(0xa5aea5410b57e4a5),
LL(0xe2afe2434dd9a1e2), LL(0x6199612ff8c24e61),
+ LL(0xb3f6b3f1457b42b3), LL(0x21842115a5423421),
LL(0x9c4a9c94d625089c), LL(0x1e781ef0663cee1e),
+ LL(0x4311432252866143), LL(0xc73bc776fc93b1c7),
LL(0xfcd7fcb32be54ffc), LL(0x0410042014082404),
+ LL(0x515951b208a2e351), LL(0x995e99bcc72f2599),
LL(0x6da96d4fc4da226d), LL(0x0d340d68391a650d),
+ LL(0xfacffa8335e979fa), LL(0xdf5bdfb684a369df),
LL(0x7ee57ed79bfca97e), LL(0x2490243db4481924),
+ LL(0x3bec3bc5d776fe3b), LL(0xab96ab313d4b9aab),
LL(0xce1fce3ed181f0ce), LL(0x1144118855229911),
+ LL(0x8f068f0c8903838f), LL(0x4e254e4a6b9c044e),
LL(0xb7e6b7d1517366b7), LL(0xeb8beb0b60cbe0eb),
+ LL(0x3cf03cfdcc78c13c), LL(0x813e817cbf1ffd81),
LL(0x946a94d4fe354094), LL(0xf7fbf7eb0cf31cf7),
+ LL(0xb9deb9a1676f18b9), LL(0x134c13985f268b13),
LL(0x2cb02c7d9c58512c), LL(0xd36bd3d6b8bb05d3),
+ LL(0xe7bbe76b5cd38ce7), LL(0x6ea56e57cbdc396e),
LL(0xc437c46ef395aac4), LL(0x030c03180f061b03),
+ LL(0x5645568a13acdc56), LL(0x440d441a49885e44),
LL(0x7fe17fdf9efea07f), LL(0xa99ea921374f88a9),
+ LL(0x2aa82a4d8254672a), LL(0xbbd6bbb16d6b0abb),
LL(0xc123c146e29f87c1), LL(0x535153a202a6f153),
+ LL(0xdc57dcae8ba572dc), LL(0x0b2c0b582716530b),
LL(0x9d4e9d9cd327019d), LL(0x6cad6c47c1d82b6c),
+ LL(0x31c43195f562a431), LL(0x74cd7487b9e8f374),
LL(0xf6fff6e309f115f6), LL(0x4605460a438c4c46),
+ LL(0xac8aac092645a5ac), LL(0x891e893c970fb589),
LL(0x145014a04428b414), LL(0xe1a3e15b42dfbae1),
+ LL(0x165816b04e2ca616), LL(0x3ae83acdd274f73a),
LL(0x69b9696fd0d20669), LL(0x092409482d124109),
+ LL(0x70dd70a7ade0d770), LL(0xb6e2b6d954716fb6),
LL(0xd067d0ceb7bd1ed0), LL(0xed93ed3b7ec7d6ed),
+ LL(0xcc17cc2edb85e2cc), LL(0x4215422a57846842),
LL(0x985a98b4c22d2c98), LL(0xa4aaa4490e55eda4),
+ LL(0x28a0285d88507528), LL(0x5c6d5cda31b8865c),
LL(0xf8c7f8933fed6bf8), LL(0x86228644a411c286),
+};
+
+#ifdef OBSOLETE
+static const u64 C0[256] = {
+ LL(0x1818281878c0d878), LL(0x23236523af0526af),
LL(0xc6c657c6f97eb8f9), LL(0xe8e825e86f13fb6f),
+ LL(0x87879487a14ccba1), LL(0xb8b8d5b862a91162),
LL(0x0101030105080905), LL(0x4f4fd14f6e420d6e),
+ LL(0x36365a36eead9bee), LL(0xa6a6f7a60459ff04),
LL(0xd2d26bd2bdde0cbd), LL(0xf5f502f506fb0e06),
+ LL(0x79798b7980ef9680), LL(0x6f6fb16fce5f30ce),
LL(0x9191ae91effc6def), LL(0x5252f65207aaf807),
+ LL(0x6060a060fd2747fd), LL(0xbcbcd9bc76893576),
LL(0x9b9bb09bcdac37cd), LL(0x8e8e8f8e8c048a8c),
+ LL(0xa3a3f8a31571d215), LL(0x0c0c140c3c606c3c),
LL(0x7b7b8d7b8aff848a), LL(0x35355f35e1b580e1),
+ LL(0x1d1d271d69e8f569), LL(0xe0e03de04753b347),
LL(0xd7d764d7acf621ac), LL(0xc2c25bc2ed5e9ced),
+ LL(0x2e2e722e966d4396), LL(0x4b4bdd4b7a62297a),
LL(0xfefe1ffe21a35d21), LL(0x5757f9571682d516),
+ LL(0x15153f1541a8bd41), LL(0x77779977b69fe8b6),
LL(0x37375937eba592eb), LL(0xe5e532e5567b9e56),
+ LL(0x9f9fbc9fd98c13d9), LL(0xf0f00df017d32317),
LL(0x4a4ade4a7f6a207f), LL(0xdada73da959e4495),
+ LL(0x5858e85825faa225), LL(0xc9c946c9ca06cfca),
LL(0x29297b298d557c8d), LL(0x0a0a1e0a22505a22),
+ LL(0xb1b1ceb14fe1504f), LL(0xa0a0fda01a69c91a),
LL(0x6b6bbd6bda7f14da), LL(0x85859285ab5cd9ab),
+ LL(0xbdbddabd73813c73), LL(0x5d5de75d34d28f34),
LL(0x1010301050809050), LL(0xf4f401f403f30703),
+ LL(0xcbcb40cbc016ddc0), LL(0x3e3e423ec6edd3c6),
LL(0x05050f0511282d11), LL(0x6767a967e61f78e6),
+ LL(0xe4e431e453739753), LL(0x27276927bb2502bb),
LL(0x4141c34158327358), LL(0x8b8b808b9d2ca79d),
+ LL(0xa7a7f4a70151f601), LL(0x7d7d877d94cfb294),
LL(0x9595a295fbdc49fb), LL(0xd8d875d89f8e569f),
+ LL(0xfbfb10fb308b7030), LL(0xeeee2fee7123cd71),
LL(0x7c7c847c91c7bb91), LL(0x6666aa66e31771e3),
+ LL(0xdddd7add8ea67b8e), LL(0x171739174bb8af4b),
LL(0x4747c94746024546), LL(0x9e9ebf9edc841adc),
+ LL(0xcaca43cac51ed4c5), LL(0x2d2d772d99755899),
LL(0xbfbfdcbf79912e79), LL(0x070709071b383f1b),
+ LL(0xadadeaad2301ac23), LL(0x5a5aee5a2feab02f),
LL(0x83839883b56cefb5), LL(0x33335533ff85b6ff),
+ LL(0x6363a563f23f5cf2), LL(0x020206020a10120a),
LL(0xaaaae3aa38399338), LL(0x71719371a8afdea8),
+ LL(0xc8c845c8cf0ec6cf), LL(0x19192b197dc8d17d),
LL(0x4949db4970723b70), LL(0xd9d976d99a865f9a),
+ LL(0xf2f20bf21dc3311d), LL(0xe3e338e3484ba848),
LL(0x5b5bed5b2ae2b92a), LL(0x888885889234bc92),
+ LL(0x9a9ab39ac8a43ec8), LL(0x26266a26be2d0bbe),
LL(0x32325632fa8dbffa), LL(0xb0b0cdb04ae9594a),
+ LL(0xe9e926e96a1bf26a), LL(0x0f0f110f33787733),
LL(0xd5d562d5a6e633a6), LL(0x80809d80ba74f4ba),
+ LL(0xbebedfbe7c99277c), LL(0xcdcd4acdde26ebde),
LL(0x34345c34e4bd89e4), LL(0x4848d848757a3275),
+ LL(0xffff1cff24ab5424), LL(0x7a7a8e7a8ff78d8f),
LL(0x9090ad90eaf464ea), LL(0x5f5fe15f3ec29d3e),
+ LL(0x20206020a01d3da0), LL(0x6868b868d5670fd5),
LL(0x1a1a2e1a72d0ca72), LL(0xaeaeefae2c19b72c),
+ LL(0xb4b4c1b45ec97d5e), LL(0x5454fc54199ace19),
LL(0x9393a893e5ec7fe5), LL(0x22226622aa0d2faa),
+ LL(0x6464ac64e90763e9), LL(0xf1f10ef112db2a12),
LL(0x73739573a2bfcca2), LL(0x121236125a90825a),
+ LL(0x4040c0405d3a7a5d), LL(0x0808180828404828),
LL(0xc3c358c3e85695e8), LL(0xecec29ec7b33df7b),
+ LL(0xdbdb70db90964d90), LL(0xa1a1fea11f61c01f),
LL(0x8d8d8a8d831c9183), LL(0x3d3d473dc9f5c8c9),
+ LL(0x9797a497f1cc5bf1), LL(0x0000000000000000),
LL(0xcfcf4ccfd436f9d4), LL(0x2b2b7d2b87456e87),
+ LL(0x76769a76b397e1b3), LL(0x82829b82b064e6b0),
LL(0xd6d667d6a9fe28a9), LL(0x1b1b2d1b77d8c377),
+ LL(0xb5b5c2b55bc1745b), LL(0xafafecaf2911be29),
LL(0x6a6abe6adf771ddf), LL(0x5050f0500dbaea0d),
+ LL(0x4545cf454c12574c), LL(0xf3f308f318cb3818),
LL(0x30305030f09dadf0), LL(0xefef2cef742bc474),
+ LL(0x3f3f413fc3e5dac3), LL(0x5555ff551c92c71c),
LL(0xa2a2fba21079db10), LL(0xeaea23ea6503e965),
+ LL(0x6565af65ec0f6aec), LL(0xbabad3ba68b90368),
LL(0x2f2f712f93654a93), LL(0xc0c05dc0e74e8ee7),
+ LL(0xdede7fde81be6081), LL(0x1c1c241c6ce0fc6c),
LL(0xfdfd1afd2ebb462e), LL(0x4d4dd74d64521f64),
+ LL(0x9292ab92e0e476e0), LL(0x75759f75bc8ffabc),
LL(0x06060a061e30361e), LL(0x8a8a838a9824ae98),
+ LL(0xb2b2cbb240f94b40), LL(0xe6e637e659638559),
LL(0x0e0e120e36707e36), LL(0x1f1f211f63f8e763),
+ LL(0x6262a662f73755f7), LL(0xd4d461d4a3ee3aa3),
LL(0xa8a8e5a832298132), LL(0x9696a796f4c452f4),
+ LL(0xf9f916f93a9b623a), LL(0xc5c552c5f666a3f6),
LL(0x25256f25b13510b1), LL(0x5959eb5920f2ab20),
+ LL(0x84849184ae54d0ae), LL(0x72729672a7b7c5a7),
LL(0x39394b39ddd5ecdd), LL(0x4c4cd44c615a1661),
+ LL(0x5e5ee25e3bca943b), LL(0x7878887885e79f85),
LL(0x38384838d8dde5d8), LL(0x8c8c898c86149886),
+ LL(0xd1d16ed1b2c617b2), LL(0xa5a5f2a50b41e40b),
LL(0xe2e23be24d43a14d), LL(0x6161a361f82f4ef8),
+ LL(0xb3b3c8b345f14245), LL(0x21216321a51534a5),
LL(0x9c9cb99cd69408d6), LL(0x1e1e221e66f0ee66),
+ LL(0x4343c54352226152), LL(0xc7c754c7fc76b1fc),
LL(0xfcfc19fc2bb34f2b), LL(0x04040c0414202414),
+ LL(0x5151f35108b2e308), LL(0x9999b699c7bc25c7),
LL(0x6d6db76dc44f22c4), LL(0x0d0d170d39686539),
+ LL(0xfafa13fa35837935), LL(0xdfdf7cdf84b66984),
LL(0x7e7e827e9bd7a99b), LL(0x24246c24b43d19b4),
+ LL(0x3b3b4d3bd7c5fed7), LL(0xababe0ab3d319a3d),
LL(0xcece4fced13ef0d1), LL(0x1111331155889955),
+ LL(0x8f8f8c8f890c8389), LL(0x4e4ed24e6b4a046b),
LL(0xb7b7c4b751d16651), LL(0xebeb20eb600be060),
+ LL(0x3c3c443cccfdc1cc), LL(0x81819e81bf7cfdbf),
LL(0x9494a194fed440fe), LL(0xf7f704f70ceb1c0c),
+ LL(0xb9b9d6b967a11867), LL(0x131335135f988b5f),
LL(0x2c2c742c9c7d519c), LL(0xd3d368d3b8d605b8),
+ LL(0xe7e734e75c6b8c5c), LL(0x6e6eb26ecb5739cb),
LL(0xc4c451c4f36eaaf3), LL(0x030305030f181b0f),
+ LL(0x5656fa56138adc13), LL(0x4444cc44491a5e49),
LL(0x7f7f817f9edfa09e), LL(0xa9a9e6a937218837),
+ LL(0x2a2a7e2a824d6782), LL(0xbbbbd0bb6db10a6d),
LL(0xc1c15ec1e24687e2), LL(0x5353f55302a2f102),
+ LL(0xdcdc79dc8bae728b), LL(0x0b0b1d0b27585327),
LL(0x9d9dba9dd39c01d3), LL(0x6c6cb46cc1472bc1),
+ LL(0x31315331f595a4f5), LL(0x74749c74b987f3b9),
LL(0xf6f607f609e31509), LL(0x4646ca46430a4c43),
+ LL(0xacace9ac2609a526), LL(0x89898689973cb597),
LL(0x14143c1444a0b444), LL(0xe1e13ee1425bba42),
+ LL(0x16163a164eb0a64e), LL(0x3a3a4e3ad2cdf7d2),
LL(0x6969bb69d06f06d0), LL(0x09091b092d48412d),
+ LL(0x70709070ada7d7ad), LL(0xb6b6c7b654d96f54),
LL(0xd0d06dd0b7ce1eb7), LL(0xeded2aed7e3bd67e),
+ LL(0xcccc49ccdb2ee2db), LL(0x4242c642572a6857),
LL(0x9898b598c2b42cc2), LL(0xa4a4f1a40e49ed0e),
+ LL(0x28287828885d7588), LL(0x5c5ce45c31da8631),
LL(0xf8f815f83f936b3f), LL(0x86869786a444c2a4),
+};
+
+static const u64 C1[256] = {
+ LL(0x781818281878c0d8), LL(0xaf23236523af0526),
LL(0xf9c6c657c6f97eb8), LL(0x6fe8e825e86f13fb),
+ LL(0xa187879487a14ccb), LL(0x62b8b8d5b862a911),
LL(0x0501010301050809), LL(0x6e4f4fd14f6e420d),
+ LL(0xee36365a36eead9b), LL(0x04a6a6f7a60459ff),
LL(0xbdd2d26bd2bdde0c), LL(0x06f5f502f506fb0e),
+ LL(0x8079798b7980ef96), LL(0xce6f6fb16fce5f30),
LL(0xef9191ae91effc6d), LL(0x075252f65207aaf8),
+ LL(0xfd6060a060fd2747), LL(0x76bcbcd9bc768935),
LL(0xcd9b9bb09bcdac37), LL(0x8c8e8e8f8e8c048a),
+ LL(0x15a3a3f8a31571d2), LL(0x3c0c0c140c3c606c),
LL(0x8a7b7b8d7b8aff84), LL(0xe135355f35e1b580),
+ LL(0x691d1d271d69e8f5), LL(0x47e0e03de04753b3),
LL(0xacd7d764d7acf621), LL(0xedc2c25bc2ed5e9c),
+ LL(0x962e2e722e966d43), LL(0x7a4b4bdd4b7a6229),
LL(0x21fefe1ffe21a35d), LL(0x165757f9571682d5),
+ LL(0x4115153f1541a8bd), LL(0xb677779977b69fe8),
LL(0xeb37375937eba592), LL(0x56e5e532e5567b9e),
+ LL(0xd99f9fbc9fd98c13), LL(0x17f0f00df017d323),
LL(0x7f4a4ade4a7f6a20), LL(0x95dada73da959e44),
+ LL(0x255858e85825faa2), LL(0xcac9c946c9ca06cf),
LL(0x8d29297b298d557c), LL(0x220a0a1e0a22505a),
+ LL(0x4fb1b1ceb14fe150), LL(0x1aa0a0fda01a69c9),
LL(0xda6b6bbd6bda7f14), LL(0xab85859285ab5cd9),
+ LL(0x73bdbddabd73813c), LL(0x345d5de75d34d28f),
LL(0x5010103010508090), LL(0x03f4f401f403f307),
+ LL(0xc0cbcb40cbc016dd), LL(0xc63e3e423ec6edd3),
LL(0x1105050f0511282d), LL(0xe66767a967e61f78),
+ LL(0x53e4e431e4537397), LL(0xbb27276927bb2502),
LL(0x584141c341583273), LL(0x9d8b8b808b9d2ca7),
+ LL(0x01a7a7f4a70151f6), LL(0x947d7d877d94cfb2),
LL(0xfb9595a295fbdc49), LL(0x9fd8d875d89f8e56),
+ LL(0x30fbfb10fb308b70), LL(0x71eeee2fee7123cd),
LL(0x917c7c847c91c7bb), LL(0xe36666aa66e31771),
+ LL(0x8edddd7add8ea67b), LL(0x4b171739174bb8af),
LL(0x464747c947460245), LL(0xdc9e9ebf9edc841a),
+ LL(0xc5caca43cac51ed4), LL(0x992d2d772d997558),
LL(0x79bfbfdcbf79912e), LL(0x1b070709071b383f),
+ LL(0x23adadeaad2301ac), LL(0x2f5a5aee5a2feab0),
LL(0xb583839883b56cef), LL(0xff33335533ff85b6),
+ LL(0xf26363a563f23f5c), LL(0x0a020206020a1012),
LL(0x38aaaae3aa383993), LL(0xa871719371a8afde),
+ LL(0xcfc8c845c8cf0ec6), LL(0x7d19192b197dc8d1),
LL(0x704949db4970723b), LL(0x9ad9d976d99a865f),
+ LL(0x1df2f20bf21dc331), LL(0x48e3e338e3484ba8),
LL(0x2a5b5bed5b2ae2b9), LL(0x92888885889234bc),
+ LL(0xc89a9ab39ac8a43e), LL(0xbe26266a26be2d0b),
LL(0xfa32325632fa8dbf), LL(0x4ab0b0cdb04ae959),
+ LL(0x6ae9e926e96a1bf2), LL(0x330f0f110f337877),
LL(0xa6d5d562d5a6e633), LL(0xba80809d80ba74f4),
+ LL(0x7cbebedfbe7c9927), LL(0xdecdcd4acdde26eb),
LL(0xe434345c34e4bd89), LL(0x754848d848757a32),
+ LL(0x24ffff1cff24ab54), LL(0x8f7a7a8e7a8ff78d),
LL(0xea9090ad90eaf464), LL(0x3e5f5fe15f3ec29d),
+ LL(0xa020206020a01d3d), LL(0xd56868b868d5670f),
LL(0x721a1a2e1a72d0ca), LL(0x2caeaeefae2c19b7),
+ LL(0x5eb4b4c1b45ec97d), LL(0x195454fc54199ace),
LL(0xe59393a893e5ec7f), LL(0xaa22226622aa0d2f),
+ LL(0xe96464ac64e90763), LL(0x12f1f10ef112db2a),
LL(0xa273739573a2bfcc), LL(0x5a121236125a9082),
+ LL(0x5d4040c0405d3a7a), LL(0x2808081808284048),
LL(0xe8c3c358c3e85695), LL(0x7becec29ec7b33df),
+ LL(0x90dbdb70db90964d), LL(0x1fa1a1fea11f61c0),
LL(0x838d8d8a8d831c91), LL(0xc93d3d473dc9f5c8),
+ LL(0xf19797a497f1cc5b), LL(0x0000000000000000),
LL(0xd4cfcf4ccfd436f9), LL(0x872b2b7d2b87456e),
+ LL(0xb376769a76b397e1), LL(0xb082829b82b064e6),
LL(0xa9d6d667d6a9fe28), LL(0x771b1b2d1b77d8c3),
+ LL(0x5bb5b5c2b55bc174), LL(0x29afafecaf2911be),
LL(0xdf6a6abe6adf771d), LL(0x0d5050f0500dbaea),
+ LL(0x4c4545cf454c1257), LL(0x18f3f308f318cb38),
LL(0xf030305030f09dad), LL(0x74efef2cef742bc4),
+ LL(0xc33f3f413fc3e5da), LL(0x1c5555ff551c92c7),
LL(0x10a2a2fba21079db), LL(0x65eaea23ea6503e9),
+ LL(0xec6565af65ec0f6a), LL(0x68babad3ba68b903),
LL(0x932f2f712f93654a), LL(0xe7c0c05dc0e74e8e),
+ LL(0x81dede7fde81be60), LL(0x6c1c1c241c6ce0fc),
LL(0x2efdfd1afd2ebb46), LL(0x644d4dd74d64521f),
+ LL(0xe09292ab92e0e476), LL(0xbc75759f75bc8ffa),
LL(0x1e06060a061e3036), LL(0x988a8a838a9824ae),
+ LL(0x40b2b2cbb240f94b), LL(0x59e6e637e6596385),
LL(0x360e0e120e36707e), LL(0x631f1f211f63f8e7),
+ LL(0xf76262a662f73755), LL(0xa3d4d461d4a3ee3a),
LL(0x32a8a8e5a8322981), LL(0xf49696a796f4c452),
+ LL(0x3af9f916f93a9b62), LL(0xf6c5c552c5f666a3),
LL(0xb125256f25b13510), LL(0x205959eb5920f2ab),
+ LL(0xae84849184ae54d0), LL(0xa772729672a7b7c5),
LL(0xdd39394b39ddd5ec), LL(0x614c4cd44c615a16),
+ LL(0x3b5e5ee25e3bca94), LL(0x857878887885e79f),
LL(0xd838384838d8dde5), LL(0x868c8c898c861498),
+ LL(0xb2d1d16ed1b2c617), LL(0x0ba5a5f2a50b41e4),
LL(0x4de2e23be24d43a1), LL(0xf86161a361f82f4e),
+ LL(0x45b3b3c8b345f142), LL(0xa521216321a51534),
LL(0xd69c9cb99cd69408), LL(0x661e1e221e66f0ee),
+ LL(0x524343c543522261), LL(0xfcc7c754c7fc76b1),
LL(0x2bfcfc19fc2bb34f), LL(0x1404040c04142024),
+ LL(0x085151f35108b2e3), LL(0xc79999b699c7bc25),
LL(0xc46d6db76dc44f22), LL(0x390d0d170d396865),
+ LL(0x35fafa13fa358379), LL(0x84dfdf7cdf84b669),
LL(0x9b7e7e827e9bd7a9), LL(0xb424246c24b43d19),
+ LL(0xd73b3b4d3bd7c5fe), LL(0x3dababe0ab3d319a),
LL(0xd1cece4fced13ef0), LL(0x5511113311558899),
+ LL(0x898f8f8c8f890c83), LL(0x6b4e4ed24e6b4a04),
LL(0x51b7b7c4b751d166), LL(0x60ebeb20eb600be0),
+ LL(0xcc3c3c443cccfdc1), LL(0xbf81819e81bf7cfd),
LL(0xfe9494a194fed440), LL(0x0cf7f704f70ceb1c),
+ LL(0x67b9b9d6b967a118), LL(0x5f131335135f988b),
LL(0x9c2c2c742c9c7d51), LL(0xb8d3d368d3b8d605),
+ LL(0x5ce7e734e75c6b8c), LL(0xcb6e6eb26ecb5739),
LL(0xf3c4c451c4f36eaa), LL(0x0f030305030f181b),
+ LL(0x135656fa56138adc), LL(0x494444cc44491a5e),
LL(0x9e7f7f817f9edfa0), LL(0x37a9a9e6a9372188),
+ LL(0x822a2a7e2a824d67), LL(0x6dbbbbd0bb6db10a),
LL(0xe2c1c15ec1e24687), LL(0x025353f55302a2f1),
+ LL(0x8bdcdc79dc8bae72), LL(0x270b0b1d0b275853),
LL(0xd39d9dba9dd39c01), LL(0xc16c6cb46cc1472b),
+ LL(0xf531315331f595a4), LL(0xb974749c74b987f3),
LL(0x09f6f607f609e315), LL(0x434646ca46430a4c),
+ LL(0x26acace9ac2609a5), LL(0x9789898689973cb5),
LL(0x4414143c1444a0b4), LL(0x42e1e13ee1425bba),
+ LL(0x4e16163a164eb0a6), LL(0xd23a3a4e3ad2cdf7),
LL(0xd06969bb69d06f06), LL(0x2d09091b092d4841),
+ LL(0xad70709070ada7d7), LL(0x54b6b6c7b654d96f),
LL(0xb7d0d06dd0b7ce1e), LL(0x7eeded2aed7e3bd6),
+ LL(0xdbcccc49ccdb2ee2), LL(0x574242c642572a68),
LL(0xc29898b598c2b42c), LL(0x0ea4a4f1a40e49ed),
+ LL(0x8828287828885d75), LL(0x315c5ce45c31da86),
LL(0x3ff8f815f83f936b), LL(0xa486869786a444c2),
+};
+
+static const u64 C2[256] = {
+ LL(0xd8781818281878c0), LL(0x26af23236523af05),
LL(0xb8f9c6c657c6f97e), LL(0xfb6fe8e825e86f13),
+ LL(0xcba187879487a14c), LL(0x1162b8b8d5b862a9),
LL(0x0905010103010508), LL(0x0d6e4f4fd14f6e42),
+ LL(0x9bee36365a36eead), LL(0xff04a6a6f7a60459),
LL(0x0cbdd2d26bd2bdde), LL(0x0e06f5f502f506fb),
+ LL(0x968079798b7980ef), LL(0x30ce6f6fb16fce5f),
LL(0x6def9191ae91effc), LL(0xf8075252f65207aa),
+ LL(0x47fd6060a060fd27), LL(0x3576bcbcd9bc7689),
LL(0x37cd9b9bb09bcdac), LL(0x8a8c8e8e8f8e8c04),
+ LL(0xd215a3a3f8a31571), LL(0x6c3c0c0c140c3c60),
LL(0x848a7b7b8d7b8aff), LL(0x80e135355f35e1b5),
+ LL(0xf5691d1d271d69e8), LL(0xb347e0e03de04753),
LL(0x21acd7d764d7acf6), LL(0x9cedc2c25bc2ed5e),
+ LL(0x43962e2e722e966d), LL(0x297a4b4bdd4b7a62),
LL(0x5d21fefe1ffe21a3), LL(0xd5165757f9571682),
+ LL(0xbd4115153f1541a8), LL(0xe8b677779977b69f),
LL(0x92eb37375937eba5), LL(0x9e56e5e532e5567b),
+ LL(0x13d99f9fbc9fd98c), LL(0x2317f0f00df017d3),
LL(0x207f4a4ade4a7f6a), LL(0x4495dada73da959e),
+ LL(0xa2255858e85825fa), LL(0xcfcac9c946c9ca06),
LL(0x7c8d29297b298d55), LL(0x5a220a0a1e0a2250),
+ LL(0x504fb1b1ceb14fe1), LL(0xc91aa0a0fda01a69),
LL(0x14da6b6bbd6bda7f), LL(0xd9ab85859285ab5c),
+ LL(0x3c73bdbddabd7381), LL(0x8f345d5de75d34d2),
LL(0x9050101030105080), LL(0x0703f4f401f403f3),
+ LL(0xddc0cbcb40cbc016), LL(0xd3c63e3e423ec6ed),
LL(0x2d1105050f051128), LL(0x78e66767a967e61f),
+ LL(0x9753e4e431e45373), LL(0x02bb27276927bb25),
LL(0x73584141c3415832), LL(0xa79d8b8b808b9d2c),
+ LL(0xf601a7a7f4a70151), LL(0xb2947d7d877d94cf),
LL(0x49fb9595a295fbdc), LL(0x569fd8d875d89f8e),
+ LL(0x7030fbfb10fb308b), LL(0xcd71eeee2fee7123),
LL(0xbb917c7c847c91c7), LL(0x71e36666aa66e317),
+ LL(0x7b8edddd7add8ea6), LL(0xaf4b171739174bb8),
LL(0x45464747c9474602), LL(0x1adc9e9ebf9edc84),
+ LL(0xd4c5caca43cac51e), LL(0x58992d2d772d9975),
LL(0x2e79bfbfdcbf7991), LL(0x3f1b070709071b38),
+ LL(0xac23adadeaad2301), LL(0xb02f5a5aee5a2fea),
LL(0xefb583839883b56c), LL(0xb6ff33335533ff85),
+ LL(0x5cf26363a563f23f), LL(0x120a020206020a10),
LL(0x9338aaaae3aa3839), LL(0xdea871719371a8af),
+ LL(0xc6cfc8c845c8cf0e), LL(0xd17d19192b197dc8),
LL(0x3b704949db497072), LL(0x5f9ad9d976d99a86),
+ LL(0x311df2f20bf21dc3), LL(0xa848e3e338e3484b),
LL(0xb92a5b5bed5b2ae2), LL(0xbc92888885889234),
+ LL(0x3ec89a9ab39ac8a4), LL(0x0bbe26266a26be2d),
LL(0xbffa32325632fa8d), LL(0x594ab0b0cdb04ae9),
+ LL(0xf26ae9e926e96a1b), LL(0x77330f0f110f3378),
LL(0x33a6d5d562d5a6e6), LL(0xf4ba80809d80ba74),
+ LL(0x277cbebedfbe7c99), LL(0xebdecdcd4acdde26),
LL(0x89e434345c34e4bd), LL(0x32754848d848757a),
+ LL(0x5424ffff1cff24ab), LL(0x8d8f7a7a8e7a8ff7),
LL(0x64ea9090ad90eaf4), LL(0x9d3e5f5fe15f3ec2),
+ LL(0x3da020206020a01d), LL(0x0fd56868b868d567),
LL(0xca721a1a2e1a72d0), LL(0xb72caeaeefae2c19),
+ LL(0x7d5eb4b4c1b45ec9), LL(0xce195454fc54199a),
LL(0x7fe59393a893e5ec), LL(0x2faa22226622aa0d),
+ LL(0x63e96464ac64e907), LL(0x2a12f1f10ef112db),
LL(0xcca273739573a2bf), LL(0x825a121236125a90),
+ LL(0x7a5d4040c0405d3a), LL(0x4828080818082840),
LL(0x95e8c3c358c3e856), LL(0xdf7becec29ec7b33),
+ LL(0x4d90dbdb70db9096), LL(0xc01fa1a1fea11f61),
LL(0x91838d8d8a8d831c), LL(0xc8c93d3d473dc9f5),
+ LL(0x5bf19797a497f1cc), LL(0x0000000000000000),
LL(0xf9d4cfcf4ccfd436), LL(0x6e872b2b7d2b8745),
+ LL(0xe1b376769a76b397), LL(0xe6b082829b82b064),
LL(0x28a9d6d667d6a9fe), LL(0xc3771b1b2d1b77d8),
+ LL(0x745bb5b5c2b55bc1), LL(0xbe29afafecaf2911),
LL(0x1ddf6a6abe6adf77), LL(0xea0d5050f0500dba),
+ LL(0x574c4545cf454c12), LL(0x3818f3f308f318cb),
LL(0xadf030305030f09d), LL(0xc474efef2cef742b),
+ LL(0xdac33f3f413fc3e5), LL(0xc71c5555ff551c92),
LL(0xdb10a2a2fba21079), LL(0xe965eaea23ea6503),
+ LL(0x6aec6565af65ec0f), LL(0x0368babad3ba68b9),
LL(0x4a932f2f712f9365), LL(0x8ee7c0c05dc0e74e),
+ LL(0x6081dede7fde81be), LL(0xfc6c1c1c241c6ce0),
LL(0x462efdfd1afd2ebb), LL(0x1f644d4dd74d6452),
+ LL(0x76e09292ab92e0e4), LL(0xfabc75759f75bc8f),
LL(0x361e06060a061e30), LL(0xae988a8a838a9824),
+ LL(0x4b40b2b2cbb240f9), LL(0x8559e6e637e65963),
LL(0x7e360e0e120e3670), LL(0xe7631f1f211f63f8),
+ LL(0x55f76262a662f737), LL(0x3aa3d4d461d4a3ee),
LL(0x8132a8a8e5a83229), LL(0x52f49696a796f4c4),
+ LL(0x623af9f916f93a9b), LL(0xa3f6c5c552c5f666),
LL(0x10b125256f25b135), LL(0xab205959eb5920f2),
+ LL(0xd0ae84849184ae54), LL(0xc5a772729672a7b7),
LL(0xecdd39394b39ddd5), LL(0x16614c4cd44c615a),
+ LL(0x943b5e5ee25e3bca), LL(0x9f857878887885e7),
LL(0xe5d838384838d8dd), LL(0x98868c8c898c8614),
+ LL(0x17b2d1d16ed1b2c6), LL(0xe40ba5a5f2a50b41),
LL(0xa14de2e23be24d43), LL(0x4ef86161a361f82f),
+ LL(0x4245b3b3c8b345f1), LL(0x34a521216321a515),
LL(0x08d69c9cb99cd694), LL(0xee661e1e221e66f0),
+ LL(0x61524343c5435222), LL(0xb1fcc7c754c7fc76),
LL(0x4f2bfcfc19fc2bb3), LL(0x241404040c041420),
+ LL(0xe3085151f35108b2), LL(0x25c79999b699c7bc),
LL(0x22c46d6db76dc44f), LL(0x65390d0d170d3968),
+ LL(0x7935fafa13fa3583), LL(0x6984dfdf7cdf84b6),
LL(0xa99b7e7e827e9bd7), LL(0x19b424246c24b43d),
+ LL(0xfed73b3b4d3bd7c5), LL(0x9a3dababe0ab3d31),
LL(0xf0d1cece4fced13e), LL(0x9955111133115588),
+ LL(0x83898f8f8c8f890c), LL(0x046b4e4ed24e6b4a),
LL(0x6651b7b7c4b751d1), LL(0xe060ebeb20eb600b),
+ LL(0xc1cc3c3c443cccfd), LL(0xfdbf81819e81bf7c),
LL(0x40fe9494a194fed4), LL(0x1c0cf7f704f70ceb),
+ LL(0x1867b9b9d6b967a1), LL(0x8b5f131335135f98),
LL(0x519c2c2c742c9c7d), LL(0x05b8d3d368d3b8d6),
+ LL(0x8c5ce7e734e75c6b), LL(0x39cb6e6eb26ecb57),
LL(0xaaf3c4c451c4f36e), LL(0x1b0f030305030f18),
+ LL(0xdc135656fa56138a), LL(0x5e494444cc44491a),
LL(0xa09e7f7f817f9edf), LL(0x8837a9a9e6a93721),
+ LL(0x67822a2a7e2a824d), LL(0x0a6dbbbbd0bb6db1),
LL(0x87e2c1c15ec1e246), LL(0xf1025353f55302a2),
+ LL(0x728bdcdc79dc8bae), LL(0x53270b0b1d0b2758),
LL(0x01d39d9dba9dd39c), LL(0x2bc16c6cb46cc147),
+ LL(0xa4f531315331f595), LL(0xf3b974749c74b987),
LL(0x1509f6f607f609e3), LL(0x4c434646ca46430a),
+ LL(0xa526acace9ac2609), LL(0xb59789898689973c),
LL(0xb44414143c1444a0), LL(0xba42e1e13ee1425b),
+ LL(0xa64e16163a164eb0), LL(0xf7d23a3a4e3ad2cd),
LL(0x06d06969bb69d06f), LL(0x412d09091b092d48),
+ LL(0xd7ad70709070ada7), LL(0x6f54b6b6c7b654d9),
LL(0x1eb7d0d06dd0b7ce), LL(0xd67eeded2aed7e3b),
+ LL(0xe2dbcccc49ccdb2e), LL(0x68574242c642572a),
LL(0x2cc29898b598c2b4), LL(0xed0ea4a4f1a40e49),
+ LL(0x758828287828885d), LL(0x86315c5ce45c31da),
LL(0x6b3ff8f815f83f93), LL(0xc2a486869786a444),
+};
+
+static const u64 C3[256] = {
+ LL(0xc0d8781818281878), LL(0x0526af23236523af),
LL(0x7eb8f9c6c657c6f9), LL(0x13fb6fe8e825e86f),
+ LL(0x4ccba187879487a1), LL(0xa91162b8b8d5b862),
LL(0x0809050101030105), LL(0x420d6e4f4fd14f6e),
+ LL(0xad9bee36365a36ee), LL(0x59ff04a6a6f7a604),
LL(0xde0cbdd2d26bd2bd), LL(0xfb0e06f5f502f506),
+ LL(0xef968079798b7980), LL(0x5f30ce6f6fb16fce),
LL(0xfc6def9191ae91ef), LL(0xaaf8075252f65207),
+ LL(0x2747fd6060a060fd), LL(0x893576bcbcd9bc76),
LL(0xac37cd9b9bb09bcd), LL(0x048a8c8e8e8f8e8c),
+ LL(0x71d215a3a3f8a315), LL(0x606c3c0c0c140c3c),
LL(0xff848a7b7b8d7b8a), LL(0xb580e135355f35e1),
+ LL(0xe8f5691d1d271d69), LL(0x53b347e0e03de047),
LL(0xf621acd7d764d7ac), LL(0x5e9cedc2c25bc2ed),
+ LL(0x6d43962e2e722e96), LL(0x62297a4b4bdd4b7a),
LL(0xa35d21fefe1ffe21), LL(0x82d5165757f95716),
+ LL(0xa8bd4115153f1541), LL(0x9fe8b677779977b6),
LL(0xa592eb37375937eb), LL(0x7b9e56e5e532e556),
+ LL(0x8c13d99f9fbc9fd9), LL(0xd32317f0f00df017),
LL(0x6a207f4a4ade4a7f), LL(0x9e4495dada73da95),
+ LL(0xfaa2255858e85825), LL(0x06cfcac9c946c9ca),
LL(0x557c8d29297b298d), LL(0x505a220a0a1e0a22),
+ LL(0xe1504fb1b1ceb14f), LL(0x69c91aa0a0fda01a),
LL(0x7f14da6b6bbd6bda), LL(0x5cd9ab85859285ab),
+ LL(0x813c73bdbddabd73), LL(0xd28f345d5de75d34),
LL(0x8090501010301050), LL(0xf30703f4f401f403),
+ LL(0x16ddc0cbcb40cbc0), LL(0xedd3c63e3e423ec6),
LL(0x282d1105050f0511), LL(0x1f78e66767a967e6),
+ LL(0x739753e4e431e453), LL(0x2502bb27276927bb),
LL(0x3273584141c34158), LL(0x2ca79d8b8b808b9d),
+ LL(0x51f601a7a7f4a701), LL(0xcfb2947d7d877d94),
LL(0xdc49fb9595a295fb), LL(0x8e569fd8d875d89f),
+ LL(0x8b7030fbfb10fb30), LL(0x23cd71eeee2fee71),
LL(0xc7bb917c7c847c91), LL(0x1771e36666aa66e3),
+ LL(0xa67b8edddd7add8e), LL(0xb8af4b171739174b),
LL(0x0245464747c94746), LL(0x841adc9e9ebf9edc),
+ LL(0x1ed4c5caca43cac5), LL(0x7558992d2d772d99),
LL(0x912e79bfbfdcbf79), LL(0x383f1b070709071b),
+ LL(0x01ac23adadeaad23), LL(0xeab02f5a5aee5a2f),
LL(0x6cefb583839883b5), LL(0x85b6ff33335533ff),
+ LL(0x3f5cf26363a563f2), LL(0x10120a020206020a),
LL(0x399338aaaae3aa38), LL(0xafdea871719371a8),
+ LL(0x0ec6cfc8c845c8cf), LL(0xc8d17d19192b197d),
LL(0x723b704949db4970), LL(0x865f9ad9d976d99a),
+ LL(0xc3311df2f20bf21d), LL(0x4ba848e3e338e348),
LL(0xe2b92a5b5bed5b2a), LL(0x34bc928888858892),
+ LL(0xa43ec89a9ab39ac8), LL(0x2d0bbe26266a26be),
LL(0x8dbffa32325632fa), LL(0xe9594ab0b0cdb04a),
+ LL(0x1bf26ae9e926e96a), LL(0x7877330f0f110f33),
LL(0xe633a6d5d562d5a6), LL(0x74f4ba80809d80ba),
+ LL(0x99277cbebedfbe7c), LL(0x26ebdecdcd4acdde),
LL(0xbd89e434345c34e4), LL(0x7a32754848d84875),
+ LL(0xab5424ffff1cff24), LL(0xf78d8f7a7a8e7a8f),
LL(0xf464ea9090ad90ea), LL(0xc29d3e5f5fe15f3e),
+ LL(0x1d3da020206020a0), LL(0x670fd56868b868d5),
LL(0xd0ca721a1a2e1a72), LL(0x19b72caeaeefae2c),
+ LL(0xc97d5eb4b4c1b45e), LL(0x9ace195454fc5419),
LL(0xec7fe59393a893e5), LL(0x0d2faa22226622aa),
+ LL(0x0763e96464ac64e9), LL(0xdb2a12f1f10ef112),
LL(0xbfcca273739573a2), LL(0x90825a121236125a),
+ LL(0x3a7a5d4040c0405d), LL(0x4048280808180828),
LL(0x5695e8c3c358c3e8), LL(0x33df7becec29ec7b),
+ LL(0x964d90dbdb70db90), LL(0x61c01fa1a1fea11f),
LL(0x1c91838d8d8a8d83), LL(0xf5c8c93d3d473dc9),
+ LL(0xcc5bf19797a497f1), LL(0x0000000000000000),
LL(0x36f9d4cfcf4ccfd4), LL(0x456e872b2b7d2b87),
+ LL(0x97e1b376769a76b3), LL(0x64e6b082829b82b0),
LL(0xfe28a9d6d667d6a9), LL(0xd8c3771b1b2d1b77),
+ LL(0xc1745bb5b5c2b55b), LL(0x11be29afafecaf29),
LL(0x771ddf6a6abe6adf), LL(0xbaea0d5050f0500d),
+ LL(0x12574c4545cf454c), LL(0xcb3818f3f308f318),
LL(0x9dadf030305030f0), LL(0x2bc474efef2cef74),
+ LL(0xe5dac33f3f413fc3), LL(0x92c71c5555ff551c),
LL(0x79db10a2a2fba210), LL(0x03e965eaea23ea65),
+ LL(0x0f6aec6565af65ec), LL(0xb90368babad3ba68),
LL(0x654a932f2f712f93), LL(0x4e8ee7c0c05dc0e7),
+ LL(0xbe6081dede7fde81), LL(0xe0fc6c1c1c241c6c),
LL(0xbb462efdfd1afd2e), LL(0x521f644d4dd74d64),
+ LL(0xe476e09292ab92e0), LL(0x8ffabc75759f75bc),
LL(0x30361e06060a061e), LL(0x24ae988a8a838a98),
+ LL(0xf94b40b2b2cbb240), LL(0x638559e6e637e659),
LL(0x707e360e0e120e36), LL(0xf8e7631f1f211f63),
+ LL(0x3755f76262a662f7), LL(0xee3aa3d4d461d4a3),
LL(0x298132a8a8e5a832), LL(0xc452f49696a796f4),
+ LL(0x9b623af9f916f93a), LL(0x66a3f6c5c552c5f6),
LL(0x3510b125256f25b1), LL(0xf2ab205959eb5920),
+ LL(0x54d0ae84849184ae), LL(0xb7c5a772729672a7),
LL(0xd5ecdd39394b39dd), LL(0x5a16614c4cd44c61),
+ LL(0xca943b5e5ee25e3b), LL(0xe79f857878887885),
LL(0xdde5d838384838d8), LL(0x1498868c8c898c86),
+ LL(0xc617b2d1d16ed1b2), LL(0x41e40ba5a5f2a50b),
LL(0x43a14de2e23be24d), LL(0x2f4ef86161a361f8),
+ LL(0xf14245b3b3c8b345), LL(0x1534a521216321a5),
LL(0x9408d69c9cb99cd6), LL(0xf0ee661e1e221e66),
+ LL(0x2261524343c54352), LL(0x76b1fcc7c754c7fc),
LL(0xb34f2bfcfc19fc2b), LL(0x20241404040c0414),
+ LL(0xb2e3085151f35108), LL(0xbc25c79999b699c7),
LL(0x4f22c46d6db76dc4), LL(0x6865390d0d170d39),
+ LL(0x837935fafa13fa35), LL(0xb66984dfdf7cdf84),
LL(0xd7a99b7e7e827e9b), LL(0x3d19b424246c24b4),
+ LL(0xc5fed73b3b4d3bd7), LL(0x319a3dababe0ab3d),
LL(0x3ef0d1cece4fced1), LL(0x8899551111331155),
+ LL(0x0c83898f8f8c8f89), LL(0x4a046b4e4ed24e6b),
LL(0xd16651b7b7c4b751), LL(0x0be060ebeb20eb60),
+ LL(0xfdc1cc3c3c443ccc), LL(0x7cfdbf81819e81bf),
LL(0xd440fe9494a194fe), LL(0xeb1c0cf7f704f70c),
+ LL(0xa11867b9b9d6b967), LL(0x988b5f131335135f),
LL(0x7d519c2c2c742c9c), LL(0xd605b8d3d368d3b8),
+ LL(0x6b8c5ce7e734e75c), LL(0x5739cb6e6eb26ecb),
LL(0x6eaaf3c4c451c4f3), LL(0x181b0f030305030f),
+ LL(0x8adc135656fa5613), LL(0x1a5e494444cc4449),
LL(0xdfa09e7f7f817f9e), LL(0x218837a9a9e6a937),
+ LL(0x4d67822a2a7e2a82), LL(0xb10a6dbbbbd0bb6d),
LL(0x4687e2c1c15ec1e2), LL(0xa2f1025353f55302),
+ LL(0xae728bdcdc79dc8b), LL(0x5853270b0b1d0b27),
LL(0x9c01d39d9dba9dd3), LL(0x472bc16c6cb46cc1),
+ LL(0x95a4f531315331f5), LL(0x87f3b974749c74b9),
LL(0xe31509f6f607f609), LL(0x0a4c434646ca4643),
+ LL(0x09a526acace9ac26), LL(0x3cb5978989868997),
LL(0xa0b44414143c1444), LL(0x5bba42e1e13ee142),
+ LL(0xb0a64e16163a164e), LL(0xcdf7d23a3a4e3ad2),
LL(0x6f06d06969bb69d0), LL(0x48412d09091b092d),
+ LL(0xa7d7ad70709070ad), LL(0xd96f54b6b6c7b654),
LL(0xce1eb7d0d06dd0b7), LL(0x3bd67eeded2aed7e),
+ LL(0x2ee2dbcccc49ccdb), LL(0x2a68574242c64257),
LL(0xb42cc29898b598c2), LL(0x49ed0ea4a4f1a40e),
+ LL(0x5d75882828782888), LL(0xda86315c5ce45c31),
LL(0x936b3ff8f815f83f), LL(0x44c2a486869786a4),
+};
+
+static const u64 C4[256] = {
+ LL(0x78c0d87818182818), LL(0xaf0526af23236523),
LL(0xf97eb8f9c6c657c6), LL(0x6f13fb6fe8e825e8),
+ LL(0xa14ccba187879487), LL(0x62a91162b8b8d5b8),
LL(0x0508090501010301), LL(0x6e420d6e4f4fd14f),
+ LL(0xeead9bee36365a36), LL(0x0459ff04a6a6f7a6),
LL(0xbdde0cbdd2d26bd2), LL(0x06fb0e06f5f502f5),
+ LL(0x80ef968079798b79), LL(0xce5f30ce6f6fb16f),
LL(0xeffc6def9191ae91), LL(0x07aaf8075252f652),
+ LL(0xfd2747fd6060a060), LL(0x76893576bcbcd9bc),
LL(0xcdac37cd9b9bb09b), LL(0x8c048a8c8e8e8f8e),
+ LL(0x1571d215a3a3f8a3), LL(0x3c606c3c0c0c140c),
LL(0x8aff848a7b7b8d7b), LL(0xe1b580e135355f35),
+ LL(0x69e8f5691d1d271d), LL(0x4753b347e0e03de0),
LL(0xacf621acd7d764d7), LL(0xed5e9cedc2c25bc2),
+ LL(0x966d43962e2e722e), LL(0x7a62297a4b4bdd4b),
LL(0x21a35d21fefe1ffe), LL(0x1682d5165757f957),
+ LL(0x41a8bd4115153f15), LL(0xb69fe8b677779977),
LL(0xeba592eb37375937), LL(0x567b9e56e5e532e5),
+ LL(0xd98c13d99f9fbc9f), LL(0x17d32317f0f00df0),
LL(0x7f6a207f4a4ade4a), LL(0x959e4495dada73da),
+ LL(0x25faa2255858e858), LL(0xca06cfcac9c946c9),
LL(0x8d557c8d29297b29), LL(0x22505a220a0a1e0a),
+ LL(0x4fe1504fb1b1ceb1), LL(0x1a69c91aa0a0fda0),
LL(0xda7f14da6b6bbd6b), LL(0xab5cd9ab85859285),
+ LL(0x73813c73bdbddabd), LL(0x34d28f345d5de75d),
LL(0x5080905010103010), LL(0x03f30703f4f401f4),
+ LL(0xc016ddc0cbcb40cb), LL(0xc6edd3c63e3e423e),
LL(0x11282d1105050f05), LL(0xe61f78e66767a967),
+ LL(0x53739753e4e431e4), LL(0xbb2502bb27276927),
LL(0x583273584141c341), LL(0x9d2ca79d8b8b808b),
+ LL(0x0151f601a7a7f4a7), LL(0x94cfb2947d7d877d),
LL(0xfbdc49fb9595a295), LL(0x9f8e569fd8d875d8),
+ LL(0x308b7030fbfb10fb), LL(0x7123cd71eeee2fee),
LL(0x91c7bb917c7c847c), LL(0xe31771e36666aa66),
+ LL(0x8ea67b8edddd7add), LL(0x4bb8af4b17173917),
LL(0x460245464747c947), LL(0xdc841adc9e9ebf9e),
+ LL(0xc51ed4c5caca43ca), LL(0x997558992d2d772d),
LL(0x79912e79bfbfdcbf), LL(0x1b383f1b07070907),
+ LL(0x2301ac23adadeaad), LL(0x2feab02f5a5aee5a),
LL(0xb56cefb583839883), LL(0xff85b6ff33335533),
+ LL(0xf23f5cf26363a563), LL(0x0a10120a02020602),
LL(0x38399338aaaae3aa), LL(0xa8afdea871719371),
+ LL(0xcf0ec6cfc8c845c8), LL(0x7dc8d17d19192b19),
LL(0x70723b704949db49), LL(0x9a865f9ad9d976d9),
+ LL(0x1dc3311df2f20bf2), LL(0x484ba848e3e338e3),
LL(0x2ae2b92a5b5bed5b), LL(0x9234bc9288888588),
+ LL(0xc8a43ec89a9ab39a), LL(0xbe2d0bbe26266a26),
LL(0xfa8dbffa32325632), LL(0x4ae9594ab0b0cdb0),
+ LL(0x6a1bf26ae9e926e9), LL(0x337877330f0f110f),
LL(0xa6e633a6d5d562d5), LL(0xba74f4ba80809d80),
+ LL(0x7c99277cbebedfbe), LL(0xde26ebdecdcd4acd),
LL(0xe4bd89e434345c34), LL(0x757a32754848d848),
+ LL(0x24ab5424ffff1cff), LL(0x8ff78d8f7a7a8e7a),
LL(0xeaf464ea9090ad90), LL(0x3ec29d3e5f5fe15f),
+ LL(0xa01d3da020206020), LL(0xd5670fd56868b868),
LL(0x72d0ca721a1a2e1a), LL(0x2c19b72caeaeefae),
+ LL(0x5ec97d5eb4b4c1b4), LL(0x199ace195454fc54),
LL(0xe5ec7fe59393a893), LL(0xaa0d2faa22226622),
+ LL(0xe90763e96464ac64), LL(0x12db2a12f1f10ef1),
LL(0xa2bfcca273739573), LL(0x5a90825a12123612),
+ LL(0x5d3a7a5d4040c040), LL(0x2840482808081808),
LL(0xe85695e8c3c358c3), LL(0x7b33df7becec29ec),
+ LL(0x90964d90dbdb70db), LL(0x1f61c01fa1a1fea1),
LL(0x831c91838d8d8a8d), LL(0xc9f5c8c93d3d473d),
+ LL(0xf1cc5bf19797a497), LL(0x0000000000000000),
LL(0xd436f9d4cfcf4ccf), LL(0x87456e872b2b7d2b),
+ LL(0xb397e1b376769a76), LL(0xb064e6b082829b82),
LL(0xa9fe28a9d6d667d6), LL(0x77d8c3771b1b2d1b),
+ LL(0x5bc1745bb5b5c2b5), LL(0x2911be29afafecaf),
LL(0xdf771ddf6a6abe6a), LL(0x0dbaea0d5050f050),
+ LL(0x4c12574c4545cf45), LL(0x18cb3818f3f308f3),
LL(0xf09dadf030305030), LL(0x742bc474efef2cef),
+ LL(0xc3e5dac33f3f413f), LL(0x1c92c71c5555ff55),
LL(0x1079db10a2a2fba2), LL(0x6503e965eaea23ea),
+ LL(0xec0f6aec6565af65), LL(0x68b90368babad3ba),
LL(0x93654a932f2f712f), LL(0xe74e8ee7c0c05dc0),
+ LL(0x81be6081dede7fde), LL(0x6ce0fc6c1c1c241c),
LL(0x2ebb462efdfd1afd), LL(0x64521f644d4dd74d),
+ LL(0xe0e476e09292ab92), LL(0xbc8ffabc75759f75),
LL(0x1e30361e06060a06), LL(0x9824ae988a8a838a),
+ LL(0x40f94b40b2b2cbb2), LL(0x59638559e6e637e6),
LL(0x36707e360e0e120e), LL(0x63f8e7631f1f211f),
+ LL(0xf73755f76262a662), LL(0xa3ee3aa3d4d461d4),
LL(0x32298132a8a8e5a8), LL(0xf4c452f49696a796),
+ LL(0x3a9b623af9f916f9), LL(0xf666a3f6c5c552c5),
LL(0xb13510b125256f25), LL(0x20f2ab205959eb59),
+ LL(0xae54d0ae84849184), LL(0xa7b7c5a772729672),
LL(0xddd5ecdd39394b39), LL(0x615a16614c4cd44c),
+ LL(0x3bca943b5e5ee25e), LL(0x85e79f8578788878),
LL(0xd8dde5d838384838), LL(0x861498868c8c898c),
+ LL(0xb2c617b2d1d16ed1), LL(0x0b41e40ba5a5f2a5),
LL(0x4d43a14de2e23be2), LL(0xf82f4ef86161a361),
+ LL(0x45f14245b3b3c8b3), LL(0xa51534a521216321),
LL(0xd69408d69c9cb99c), LL(0x66f0ee661e1e221e),
+ LL(0x522261524343c543), LL(0xfc76b1fcc7c754c7),
LL(0x2bb34f2bfcfc19fc), LL(0x1420241404040c04),
+ LL(0x08b2e3085151f351), LL(0xc7bc25c79999b699),
LL(0xc44f22c46d6db76d), LL(0x396865390d0d170d),
+ LL(0x35837935fafa13fa), LL(0x84b66984dfdf7cdf),
LL(0x9bd7a99b7e7e827e), LL(0xb43d19b424246c24),
+ LL(0xd7c5fed73b3b4d3b), LL(0x3d319a3dababe0ab),
LL(0xd13ef0d1cece4fce), LL(0x5588995511113311),
+ LL(0x890c83898f8f8c8f), LL(0x6b4a046b4e4ed24e),
LL(0x51d16651b7b7c4b7), LL(0x600be060ebeb20eb),
+ LL(0xccfdc1cc3c3c443c), LL(0xbf7cfdbf81819e81),
LL(0xfed440fe9494a194), LL(0x0ceb1c0cf7f704f7),
+ LL(0x67a11867b9b9d6b9), LL(0x5f988b5f13133513),
LL(0x9c7d519c2c2c742c), LL(0xb8d605b8d3d368d3),
+ LL(0x5c6b8c5ce7e734e7), LL(0xcb5739cb6e6eb26e),
LL(0xf36eaaf3c4c451c4), LL(0x0f181b0f03030503),
+ LL(0x138adc135656fa56), LL(0x491a5e494444cc44),
LL(0x9edfa09e7f7f817f), LL(0x37218837a9a9e6a9),
+ LL(0x824d67822a2a7e2a), LL(0x6db10a6dbbbbd0bb),
LL(0xe24687e2c1c15ec1), LL(0x02a2f1025353f553),
+ LL(0x8bae728bdcdc79dc), LL(0x275853270b0b1d0b),
LL(0xd39c01d39d9dba9d), LL(0xc1472bc16c6cb46c),
+ LL(0xf595a4f531315331), LL(0xb987f3b974749c74),
LL(0x09e31509f6f607f6), LL(0x430a4c434646ca46),
+ LL(0x2609a526acace9ac), LL(0x973cb59789898689),
LL(0x44a0b44414143c14), LL(0x425bba42e1e13ee1),
+ LL(0x4eb0a64e16163a16), LL(0xd2cdf7d23a3a4e3a),
LL(0xd06f06d06969bb69), LL(0x2d48412d09091b09),
+ LL(0xada7d7ad70709070), LL(0x54d96f54b6b6c7b6),
LL(0xb7ce1eb7d0d06dd0), LL(0x7e3bd67eeded2aed),
+ LL(0xdb2ee2dbcccc49cc), LL(0x572a68574242c642),
LL(0xc2b42cc29898b598), LL(0x0e49ed0ea4a4f1a4),
+ LL(0x885d758828287828), LL(0x31da86315c5ce45c),
LL(0x3f936b3ff8f815f8), LL(0xa444c2a486869786),
+};
+
+static const u64 C5[256] = {
+ LL(0x1878c0d878181828), LL(0x23af0526af232365),
LL(0xc6f97eb8f9c6c657), LL(0xe86f13fb6fe8e825),
+ LL(0x87a14ccba1878794), LL(0xb862a91162b8b8d5),
LL(0x0105080905010103), LL(0x4f6e420d6e4f4fd1),
+ LL(0x36eead9bee36365a), LL(0xa60459ff04a6a6f7),
LL(0xd2bdde0cbdd2d26b), LL(0xf506fb0e06f5f502),
+ LL(0x7980ef968079798b), LL(0x6fce5f30ce6f6fb1),
LL(0x91effc6def9191ae), LL(0x5207aaf8075252f6),
+ LL(0x60fd2747fd6060a0), LL(0xbc76893576bcbcd9),
LL(0x9bcdac37cd9b9bb0), LL(0x8e8c048a8c8e8e8f),
+ LL(0xa31571d215a3a3f8), LL(0x0c3c606c3c0c0c14),
LL(0x7b8aff848a7b7b8d), LL(0x35e1b580e135355f),
+ LL(0x1d69e8f5691d1d27), LL(0xe04753b347e0e03d),
LL(0xd7acf621acd7d764), LL(0xc2ed5e9cedc2c25b),
+ LL(0x2e966d43962e2e72), LL(0x4b7a62297a4b4bdd),
LL(0xfe21a35d21fefe1f), LL(0x571682d5165757f9),
+ LL(0x1541a8bd4115153f), LL(0x77b69fe8b6777799),
LL(0x37eba592eb373759), LL(0xe5567b9e56e5e532),
+ LL(0x9fd98c13d99f9fbc), LL(0xf017d32317f0f00d),
LL(0x4a7f6a207f4a4ade), LL(0xda959e4495dada73),
+ LL(0x5825faa2255858e8), LL(0xc9ca06cfcac9c946),
LL(0x298d557c8d29297b), LL(0x0a22505a220a0a1e),
+ LL(0xb14fe1504fb1b1ce), LL(0xa01a69c91aa0a0fd),
LL(0x6bda7f14da6b6bbd), LL(0x85ab5cd9ab858592),
+ LL(0xbd73813c73bdbdda), LL(0x5d34d28f345d5de7),
LL(0x1050809050101030), LL(0xf403f30703f4f401),
+ LL(0xcbc016ddc0cbcb40), LL(0x3ec6edd3c63e3e42),
LL(0x0511282d1105050f), LL(0x67e61f78e66767a9),
+ LL(0xe453739753e4e431), LL(0x27bb2502bb272769),
LL(0x41583273584141c3), LL(0x8b9d2ca79d8b8b80),
+ LL(0xa70151f601a7a7f4), LL(0x7d94cfb2947d7d87),
LL(0x95fbdc49fb9595a2), LL(0xd89f8e569fd8d875),
+ LL(0xfb308b7030fbfb10), LL(0xee7123cd71eeee2f),
LL(0x7c91c7bb917c7c84), LL(0x66e31771e36666aa),
+ LL(0xdd8ea67b8edddd7a), LL(0x174bb8af4b171739),
LL(0x47460245464747c9), LL(0x9edc841adc9e9ebf),
+ LL(0xcac51ed4c5caca43), LL(0x2d997558992d2d77),
LL(0xbf79912e79bfbfdc), LL(0x071b383f1b070709),
+ LL(0xad2301ac23adadea), LL(0x5a2feab02f5a5aee),
LL(0x83b56cefb5838398), LL(0x33ff85b6ff333355),
+ LL(0x63f23f5cf26363a5), LL(0x020a10120a020206),
LL(0xaa38399338aaaae3), LL(0x71a8afdea8717193),
+ LL(0xc8cf0ec6cfc8c845), LL(0x197dc8d17d19192b),
LL(0x4970723b704949db), LL(0xd99a865f9ad9d976),
+ LL(0xf21dc3311df2f20b), LL(0xe3484ba848e3e338),
LL(0x5b2ae2b92a5b5bed), LL(0x889234bc92888885),
+ LL(0x9ac8a43ec89a9ab3), LL(0x26be2d0bbe26266a),
LL(0x32fa8dbffa323256), LL(0xb04ae9594ab0b0cd),
+ LL(0xe96a1bf26ae9e926), LL(0x0f337877330f0f11),
LL(0xd5a6e633a6d5d562), LL(0x80ba74f4ba80809d),
+ LL(0xbe7c99277cbebedf), LL(0xcdde26ebdecdcd4a),
LL(0x34e4bd89e434345c), LL(0x48757a32754848d8),
+ LL(0xff24ab5424ffff1c), LL(0x7a8ff78d8f7a7a8e),
LL(0x90eaf464ea9090ad), LL(0x5f3ec29d3e5f5fe1),
+ LL(0x20a01d3da0202060), LL(0x68d5670fd56868b8),
LL(0x1a72d0ca721a1a2e), LL(0xae2c19b72caeaeef),
+ LL(0xb45ec97d5eb4b4c1), LL(0x54199ace195454fc),
LL(0x93e5ec7fe59393a8), LL(0x22aa0d2faa222266),
+ LL(0x64e90763e96464ac), LL(0xf112db2a12f1f10e),
LL(0x73a2bfcca2737395), LL(0x125a90825a121236),
+ LL(0x405d3a7a5d4040c0), LL(0x0828404828080818),
LL(0xc3e85695e8c3c358), LL(0xec7b33df7becec29),
+ LL(0xdb90964d90dbdb70), LL(0xa11f61c01fa1a1fe),
LL(0x8d831c91838d8d8a), LL(0x3dc9f5c8c93d3d47),
+ LL(0x97f1cc5bf19797a4), LL(0x0000000000000000),
LL(0xcfd436f9d4cfcf4c), LL(0x2b87456e872b2b7d),
+ LL(0x76b397e1b376769a), LL(0x82b064e6b082829b),
LL(0xd6a9fe28a9d6d667), LL(0x1b77d8c3771b1b2d),
+ LL(0xb55bc1745bb5b5c2), LL(0xaf2911be29afafec),
LL(0x6adf771ddf6a6abe), LL(0x500dbaea0d5050f0),
+ LL(0x454c12574c4545cf), LL(0xf318cb3818f3f308),
LL(0x30f09dadf0303050), LL(0xef742bc474efef2c),
+ LL(0x3fc3e5dac33f3f41), LL(0x551c92c71c5555ff),
LL(0xa21079db10a2a2fb), LL(0xea6503e965eaea23),
+ LL(0x65ec0f6aec6565af), LL(0xba68b90368babad3),
LL(0x2f93654a932f2f71), LL(0xc0e74e8ee7c0c05d),
+ LL(0xde81be6081dede7f), LL(0x1c6ce0fc6c1c1c24),
LL(0xfd2ebb462efdfd1a), LL(0x4d64521f644d4dd7),
+ LL(0x92e0e476e09292ab), LL(0x75bc8ffabc75759f),
LL(0x061e30361e06060a), LL(0x8a9824ae988a8a83),
+ LL(0xb240f94b40b2b2cb), LL(0xe659638559e6e637),
LL(0x0e36707e360e0e12), LL(0x1f63f8e7631f1f21),
+ LL(0x62f73755f76262a6), LL(0xd4a3ee3aa3d4d461),
LL(0xa832298132a8a8e5), LL(0x96f4c452f49696a7),
+ LL(0xf93a9b623af9f916), LL(0xc5f666a3f6c5c552),
LL(0x25b13510b125256f), LL(0x5920f2ab205959eb),
+ LL(0x84ae54d0ae848491), LL(0x72a7b7c5a7727296),
LL(0x39ddd5ecdd39394b), LL(0x4c615a16614c4cd4),
+ LL(0x5e3bca943b5e5ee2), LL(0x7885e79f85787888),
LL(0x38d8dde5d8383848), LL(0x8c861498868c8c89),
+ LL(0xd1b2c617b2d1d16e), LL(0xa50b41e40ba5a5f2),
LL(0xe24d43a14de2e23b), LL(0x61f82f4ef86161a3),
***The diff for this file has been truncated for email.***
=======================================
--- /dev/null
+++ /tests/Makefile.am Sat Feb 27 09:31:24 2010
@@ -0,0 +1,11 @@
+## Process this file with automake to produce Makefile.in
+
+# For systems without dd and/or
+# /dev/urandom and/or /dev/zero
+check_PROGRAMS = test-helper
+test_helper_SOURCES = test-helper.c ../src/shacrypt.h
+test_helper_LDADD = ../src/libshacrypt.a
+
+TESTS_ENVIRONMENT = SHACRYPT=$(top_builddir)/src/shacrypt$(EXEEXT) $(SHELL)
+dist_TESTS = t1.sh t2.sh t3.sh t4.sh t5.sh
+XFAIL_TESTS = t1.sh t5.sh
=======================================
--- /dev/null
+++ /tests/Makefile.in Sat Feb 27 09:31:24 2010
@@ -0,0 +1,436 @@
+# Makefile.in generated by automake 1.11.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
+# Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+check_PROGRAMS = test-helper$(EXEEXT)
+subdir = tests
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am_test_helper_OBJECTS = test-helper.$(OBJEXT)
+test_helper_OBJECTS = $(am_test_helper_OBJECTS)
+test_helper_DEPENDENCIES = ../src/libshacrypt.a
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(test_helper_SOURCES)
+DIST_SOURCES = $(test_helper_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+COMMANDLINE = @COMMANDLINE@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DWINDOWS = @DWINDOWS@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+GUI_CFLAGS = @GUI_CFLAGS@
+GUI_LIBS = @GUI_LIBS@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MWINDOWS = @MWINDOWS@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+test_helper_SOURCES = test-helper.c ../src/shacrypt.h
+test_helper_LDADD = ../src/libshacrypt.a
+TESTS_ENVIRONMENT = SHACRYPT=$(top_builddir)/src/shacrypt$(EXEEXT) $(SHELL)
+dist_TESTS = t1.sh t2.sh t3.sh t4.sh t5.sh
+XFAIL_TESTS = t1.sh t5.sh
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits tests/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnits tests/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
$(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
$(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure
$(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+ -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
+test-helper$(EXEEXT): $(test_helper_OBJECTS) $(test_helper_DEPENDENCIES)
+ @rm -f test-helper$(EXEEXT)
+ $(LINK) $(test_helper_OBJECTS) $(test_helper_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-helper.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|
\.o$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@
$< &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no
@AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp)
@AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|
\.obj$$||'`;\
+@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@
`$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no
@AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp)
@AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ set x; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in files) print i; }; }'`; \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {}
\;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {}
\;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f
$(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean \
+ clean-checkPROGRAMS clean-generic ctags distclean \
+ distclean-compile distclean-generic distclean-tags distdir dvi \
+ dvi-am html html-am info info-am install install-am \
+ install-data install-data-am install-dvi install-dvi-am \
+ install-exec install-exec-am install-html install-html-am \
+ install-info install-info-am install-man install-pdf \
+ install-pdf-am install-ps install-ps-am install-strip \
+ installcheck installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+ uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
=======================================
--- /dev/null
+++ /tests/test-helper.c Sat Feb 27 09:31:24 2010
@@ -0,0 +1,38 @@
+/**
+ * SHACrypt test helper - Generates random data
+ *
+ * SHACrypt - Encrypt files using cryptographic hash functions
+ * Copyright (C) 2009-10 LlamaSlayers
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * 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, see <http://www.gnu.org/licenses/>.
+ *
+ * @since 1.2.2
+ * @version 1.2.2
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "../src/shacrypt.h"
+
+int main( int argc, char **argv ) {
+ FILE *rand = fopen( argv[1], "wb" );
+ char data[1024] = {0};
+ SHACrypt_GenRand( data, 1024 );
+ fwrite( "\0", 1, 1, rand );
+ fwrite( data, 1, 1000, rand );
+ fclose( rand );
+
+ return 0;
+}
=======================================
--- /commandline.c Tue Feb 23 16:24:17 2010
+++ /dev/null
@@ -1,328 +0,0 @@
-/**
- * SHACrypt command line
- *
- * SHACrypt - Encrypt files using cryptographic hash functions
- * Copyright (C) 2009 LlamaSlayers
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * 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, see <http://www.gnu.org/licenses/>.
- *
- * @since 1.1.2
- * @version 1.2.2
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <time.h>
-#include "shacrypt.h"
-#include "config.h"
-
-static const char identifier[3] = "\xA7\x09\xC3";
-
-/* Test for nonzero error code, exit with message if so */
-void test(int err, const char* msg) {
- if (err) {
- fprintf(stderr, "%s: error %d\n", msg, err);
- exit(1);
- }
-}
-
-void showhelp( char *appname, char *mode ) {
- if ( strcmp( mode, "ha" ) == 0 ) {
- printf( "SHACrypt %s: Asymmetric Encryption\n", PACKAGE_VERSION );
- printf( "Please note: All steps are formed in the same way as
normal encryption, with the exception of the first argument (the e, a, or
d). See '%s h' for more details. In these examples, Alice is the sender and
Bob is the recipient. Between each step, the file would be transmitted to
the other person.\n", appname );
- printf( " Step 1, Alice: Encryption - '%s e'\n", appname );
- printf( " Step 2, Bob: Asymmetric encryption - '%s a'\n", appname
);
- printf( " Step 3, Alice: Asymmetric decryption - '%s a'\n",
appname );
- printf( " Step 4, Bob: Decryption - '%s d'\n", appname );
- } else if ( strcmp( mode, "he" ) == 0 ) {
- printf( "SHACrypt %s: Advanced encryption\n", PACKAGE_VERSION );
- printf( "Appending letters to the \"%s e\" will change the hashing
algorithms used.\n", appname );
- printf( " a - SHA1\n" );
- printf( " b - SHA224\n" );
- printf( " c - SHA256\n" );
- printf( " d - SHA384\n" );
- printf( " e - SHA512\n" );
- printf( " f - MD5\n" );
- printf( " g - CubeHash\n" );
- printf( " h - WHIRLPOOL\n" );
- printf( "Multiple letters can be combined. If none are used,
SHACrypt will default to SHA1.\n" );
- } else {
- printf( "SHACrypt %s\n", PACKAGE_VERSION );
- printf( " Encrypt a file: %s e password file.in file.out\n",
appname );
- printf( " Encrypt stdin: %s e password\n", appname );
- printf( " Get a list of hash algorithms: %s he\n", appname );
- printf( " Decrypt a file: %s d password file.in file.out\n",
appname );
- printf( " Decrypt stdin: %s d password\n", appname );
- printf( " Asymmetric encryption: See '%s ha' for more
information.\n", appname );
- printf( " Old style encryption/decryption: %s c password file.in
file.out\n", appname );
- printf( " Get this help: %s h\n", appname );
- }
-}
-
-void encryptmode( int argc, char **argv ) {
- int n;
- FILE *f,
- *o;
- static char fbuf[256] = {0},
- obuf[256] = {0};
- SHACrypt_Context s;
- unsigned char algos = '\0';
-
- if ( strlen( argv[1] ) > 1 ) {
- for ( n = 1; n < strlen( argv[1] ); n++ ) {
- switch ( argv[1][n] ) {
- case 'a': // SHA1
- algos |= '\x01';
- break;
- case 'b': // SHA224
- algos |= '\x02';
- break;
- case 'c': // SHA256
- algos |= '\x04';
- break;
- case 'd': // SHA384
- algos |= '\x08';
- break;
- case 'e': // SHA512
- algos |= '\x10';
- break;
- case 'f': // MD5
- algos |= '\x20';
- break;
- case 'g': // CubeHash
- algos |= '\x40';
- break;
- case 'h': // WHIRLPOOL
- algos |= '\x80';
- break;
- default:
- fprintf( stderr, "Unknown switch: %c\n", argv[1][n] );
- exit( 1 );
- }
- }
- }
-
- if ( algos == '\0' )
- algos = '\x01';
-
- if ( argc > 3 ) {
- f = fopen( argv[3], "rb");
- if ( !f ) {
- perror( argv[3] );
- exit( 1 );
- }
- o = fopen( argv[4], "wb" );
- if ( !o ) {
- perror( argv[4] );
- exit( 1 );
- }
- } else {
- f = stdin;
- o = stdout;
- }
-
- n = SHACrypt_GetRand( algos, fbuf );
- if ( n < 0 ) {
- fprintf( stderr, "Warning: Could not connect to random number
generating device. Using weaker time-based random number generator.\n" );
- n = -n;
- }
-
- SHACrypt_Init( &s, argv[2], strlen( argv[2] ), algos, fbuf, n );
-
- fwrite( identifier, 1, 3, o ); // Identifier
- fwrite( "\2\0", 1, 2, o ); // Format version
- fputc( (unsigned char)(n - 1), o ); // Random seed length
- fwrite( fbuf, 1, n, o ); // Random seed
- fputc( algos, o ); // Hash alogithms used
-
- /* Do the actual encryption */
- while ( ( n = fread( fbuf, 1, 256, f ) ) > 0 ) {
- SHACrypt_Process( &s, fbuf, obuf, n );
-
- fwrite( obuf, 1, n, o );
- }
-}
-
-void decryptmode( int argc, char **argv ) {
- int n;
- FILE *f,
- *o;
- static char fbuf[256] = {0},
- obuf[256] = {0};
- SHACrypt_Context s;
- unsigned char algos,
- randlen;
-
- if ( argc > 3 ) {
- f = fopen( argv[3], "rb");
- if ( !f ) {
- perror( argv[3] );
- exit( 1 );
- }
- o = fopen( argv[4], "wb" );
- if ( !o ) {
- perror( argv[4] );
- exit( 1 );
- }
- } else {
- f = stdin;
- o = stdout;
- }
-
- fread( fbuf, 1, 5, f );
-
- test( strncmp( fbuf, identifier, 3 ), "SHACrypt File Identifier" );
- if ( fbuf[3] == '\1' && fbuf[4] == '\0' ) {
- randlen = '\x13';
- fread( fbuf, 1, 20, f );
- algos = '\x01';
- } else if ( fbuf[3] == '\2' && fbuf[4] == '\0' ) {
- randlen = fgetc( f );
- fread( fbuf, 1, (int)randlen + 1, f );
- algos = fgetc( f );
- } else {
- fprintf( stderr, "Input file was not in a format that could be
read by SHACrypt. (Maybe it's a newer version?)" );
- exit( 1 );
- }
-
- SHACrypt_Init( &s, argv[2], strlen( argv[2] ), algos, fbuf,
(int)randlen + 1 );
-
- /* Do the actual decryption */
- while ( ( n = fread( fbuf, 1, 256, f ) ) > 0 ) {
- SHACrypt_Process( &s, fbuf, obuf, n );
-
- fwrite( obuf, 1, n, o );
- }
-}
-
-void compatmode( int argc, char **argv ) {
- int n;
- FILE* f;
- FILE* o;
- static char fbuf[256] = {0},
- obuf[256] = {0};
- SHACrypt_Context s;
-
- if ( argc > 3 ) {
- f = fopen( argv[3], "rb");
- if ( !f ) {
- perror( argv[3] );
- exit( 1 );
- }
- o = fopen( argv[4], "wb" );
- if ( !o ) {
- perror( argv[4] );
- exit( 1 );
- }
- } else {
- f = stdin;
- o = stdout;
- }
-
- SHACrypt_Init( &s, argv[2], strlen( argv[2] ), '\x01', "", 0 );
-
- /* Do the actual en/decryption */
- while ( ( n = fread( fbuf, 1, 256, f ) ) > 0 ) {
- SHACrypt_Process( &s, fbuf, obuf, n );
-
- fwrite( obuf, 1, n, o );
- }
-}
-
-void asymmetricmode( int argc, char **argv ) {
- int n;
- FILE *f,
- *o;
- static char fbuf[256] = {0},
- obuf[256] = {0};
- SHACrypt_Context s;
- unsigned char algos,
- randlen;
-
- if ( argc > 3 ) {
- f = fopen( argv[3], "rb");
- if ( !f ) {
- perror( argv[3] );
- exit( 1 );
- }
- o = fopen( argv[4], "wb" );
- if ( !o ) {
- perror( argv[4] );
- exit( 1 );
- }
- } else {
- f = stdin;
- o = stdout;
- }
-
- fread( fbuf, 1, 5, f );
-
- test( strncmp( fbuf, identifier, 3 ), "SHACrypt File Identifier" );
- if ( fbuf[3] == '\1' && fbuf[4] == '\0' ) {
- randlen = '\x13';
- fread( fbuf, 1, 20, f );
- algos = '\x01';
- } else if ( fbuf[3] == '\2' && fbuf[4] == '\0' ) {
- randlen = fgetc( f );
- fread( fbuf, 1, (int)randlen + 1, f );
- algos = fgetc( f );
- } else {
- fprintf( stderr, "Input file was not in a format that could be
read by SHACrypt. (Maybe it's a newer version?)" );
- exit( 1 );
- }
-
- fwrite( identifier, 1, 3, o ); // Identifier
- fwrite( "\2\0", 1, 2, o ); // Format version
- fputc( randlen, o ); // Random seed length
- fwrite( fbuf, 1, (int)randlen + 1, o ); // Random seed
- fputc( algos, o ); // Hash algorithms used
-
- SHACrypt_Init( &s, argv[2], strlen( argv[2] ), algos, fbuf,
(int)randlen + 1 );
-
- /* Do the actual encryption */
- while ( ( n = fread( fbuf, 1, 256, f ) ) > 0 ) {
- SHACrypt_Process( &s, fbuf, obuf, n );
-
- fwrite( obuf, 1, n, o );
- }
-}
-
-int main( int argc, char **argv ) {
- if ( !argv[1] ) {
- argv[1] = "h";
- }
-
- switch ( argv[1][0] ) {
- case 'c':
- compatmode( argc, argv );
- break;
- case 'e':
- encryptmode( argc, argv );
- break;
- case 'd':
- decryptmode( argc, argv );
- break;
- case 'a':
- asymmetricmode( argc, argv );
- break;
- case 'h':
- showhelp( argv[0], argv[1] );
- break;
- default:
- showhelp( argv[0], "h" );
- break;
- }
- return 0;
-}
=======================================
--- /glade.sed Sun Feb 21 11:21:39 2010
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/bin/sed -f
-
-# SHACrypt graphical user interface (compile-time helper)
-#
-# SHACrypt - Encrypt files using cryptographic hash functions
-# Copyright (C) 2009 LlamaSlayers
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# 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, see <http://www.gnu.org/licenses/>.
-
-1i\
-#ifndef _SHACRYPT_GLADE_H_
-1i\
-#define _SHACRYPT_GLADE_H_
-1i\
-const char* shacrypt_glade =
-s/\\/\\\\/g
-s/"/\\"/g
-s/^.*$/"&\\n"/g
-$a\
-;
-$a\
-#endif
-
=======================================
--- /gui.c Sun Feb 21 11:21:39 2010
+++ /dev/null
@@ -1,1168 +0,0 @@
-/**
- * SHACrypt graphical user interface
- *
- * SHACrypt - Encrypt files using cryptographic hash functions
- * Copyright (C) 2009 LlamaSlayers
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * 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, see <http://www.gnu.org/licenses/>.
- *
- * @since 1.2.1
- * @version 1.2.2
- */
-
-#include <gtk/gtk.h>
-#include <gdk-pixbuf/gdk-pixdata.h>
-#include <stdio.h>
-#include <string.h>
-#include "shacrypt.h"
-#include "glade.h"
-#include "shacrypt-icon.h"
-
-static const char identifier[3] = "\xA7\x09\xC3";
-
-GtkBuilder* builder;
-
-/* Encryption */
-G_MODULE_EXPORT void button_pressed_encrypt( GtkWidget* button, gpointer
data ) {
- GtkWidget* step1;
- step1 = GTK_WIDGET( gtk_builder_get_object( builder, "encrypt_step1" )
);
-
- gtk_widget_show( step1 );
-
- g_free( step1 );
-}
-
-G_MODULE_EXPORT void encrypt_step1_cancel( GtkWidget* button, gpointer
data ) {
- GtkWidget* step1;
- step1 = GTK_WIDGET( gtk_builder_get_object( builder, "encrypt_step1" )
);
-
- gtk_widget_hide( step1 );
-
- g_free( step1 );
-}
-
-G_MODULE_EXPORT void encrypt_step1_ok( GtkWidget* button, gpointer data ) {
- // Make sure there's actually a file selected.
- GtkFileChooser* file;
-
- file = GTK_FILE_CHOOSER( gtk_builder_get_object(
builder, "file_e1_select" ) );
-
- if ( gtk_file_chooser_get_filename( file ) == NULL ) {
- g_free( file );
- return;
- }
-
- g_free( file );
-
- // This part of the reset is here because Glade won't let me set
default values.
- GtkToggleButton* sha1;
- GtkToggleButton* sha224;
- GtkToggleButton* sha256;
- GtkToggleButton* sha384;
- GtkToggleButton* sha512;
- GtkToggleButton* md5;
- GtkToggleButton* cubehash;
- GtkToggleButton* whirlpool;
- GtkToggleButton* randomseed;
- GtkWidget* seed;
-
- sha1 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_sha1" ) );
- sha224 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_sha224" ) );
- sha256 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_sha256" ) );
- sha384 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_sha384" ) );
- sha512 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_sha512" ) );
- md5 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_md5" ) );
- cubehash = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_cubehash" ) );
- whirlpool = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_whirlpool" ) );
- randomseed = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "radio_e2_randomseed_off" ) );
- seed = GTK_WIDGET( gtk_builder_get_object(
builder, "hscale_e2_randomseed" ) );
-
- gtk_toggle_button_set_active( sha1, TRUE );
- gtk_toggle_button_set_active( sha224, FALSE );
- gtk_toggle_button_set_active( sha256, FALSE );
- gtk_toggle_button_set_active( sha384, FALSE );
- gtk_toggle_button_set_active( sha512, FALSE );
- gtk_toggle_button_set_active( md5, FALSE );
- gtk_toggle_button_set_active( cubehash, FALSE );
- gtk_toggle_button_set_active( whirlpool, FALSE );
- gtk_toggle_button_set_active( randomseed, TRUE );
- gtk_widget_set_sensitive( seed, FALSE );
- gtk_range_set_value( GTK_RANGE( seed ), 20.0 );
-
- g_free( sha1 );
- g_free( sha224 );
- g_free( sha256 );
- g_free( sha384 );
- g_free( sha512 );
- g_free( md5 );
- g_free( cubehash );
- g_free( whirlpool );
- g_free( randomseed );
- g_free( seed );
-
- // Now on to the actual displaying part.
- GtkWidget* step1;
- GtkWidget* step2;
-
- step1 = GTK_WIDGET( gtk_builder_get_object( builder, "encrypt_step1" )
);
- step2 = GTK_WIDGET( gtk_builder_get_object( builder, "encrypt_step2" )
);
-
- gtk_widget_show( step2 );
- gtk_widget_hide( step1 );
-
- g_free( step1 );
- g_free( step2 );
-}
-
-/* Password scoring method adapted from
- * http://www.geekwisdom.com/js/passwordmeter.js
- */
-G_MODULE_EXPORT void encrypt_step2_passchange( GtkEntry* button, gpointer
data ) {
- GtkProgressBar* meter;
-
- meter = GTK_PROGRESS_BAR( gtk_builder_get_object(
builder, "progressbar_e2_pass_strength" ) );
-
- int len = gtk_entry_get_text_length( button );
- const char* pass = gtk_entry_get_text( button );
-
- if ( len == 0 ) {
- gtk_progress_bar_set_fraction( meter, 0.0 );
- gtk_progress_bar_set_text( meter, "Enter a password." );
-
- g_free( meter );
-
- return;
- }
-
- int score, i,
- lower = 0,
- upper = 0,
- num = 0,
- symb = 0;
-
- // Total length
- if ( len > 15 ) {
- score = 18;
- } else if ( len > 7 ) {
- score = 12;
- } else if ( len > 4 ) {
- score = 6;
- } else {
- score = 3;
- }
-
- for ( i = 0; i < len; i++ ) {
- if ( pass[i] >= 'a' && pass[i] <= 'z' )
- lower++;
- else if ( pass[i] >= 'A' && pass[i] <= 'Z' )
- upper++;
- else if ( pass[i] >= '0' && pass[i] <= '9' )
- num++;
- else
- symb++;
- }
-
- // Letters
- if ( lower || upper )
- score += 1;
- if ( lower && upper )
- score += 2;
- if ( lower + upper > 1 )
- score += 2;
- if ( lower > 1 && upper > 1 )
- score += 2;
-
- // Numbers
- if ( num == 1 )
- score += 5;
- if ( num > 1 )
- score += 7;
-
- // Symbols
- if ( symb == 1 )
- score += 5;
- if ( symb > 1 )
- score += 7;
-
- // Combinations
- if ( ( upper || lower ) && num )
- score++;
- if ( upper && lower )
- score++;
- if ( ( upper || lower ) && num && symb )
- score += 2;
- if ( upper && lower && num && symb )
- score += 2;
-
- gtk_progress_bar_set_fraction( meter, score / 45.0 );
- if ( score == 45 )
- gtk_progress_bar_set_text( meter, "Excellent" );
- else if ( score > 39 )
- gtk_progress_bar_set_text( meter, "Secure" );
- else if ( score > 24 )
- gtk_progress_bar_set_text( meter, "Good" );
- else if ( score > 9 )
- gtk_progress_bar_set_text( meter, "Ok" );
- else
- gtk_progress_bar_set_text( meter, "Bad" );
-
- g_free( meter );
-}
-
-G_MODULE_EXPORT unsigned char encrypt_step2_get_algos() {
- unsigned char algos = '\0';
-
- GtkToggleButton* sha1;
- GtkToggleButton* sha224;
- GtkToggleButton* sha256;
- GtkToggleButton* sha384;
- GtkToggleButton* sha512;
- GtkToggleButton* md5;
- GtkToggleButton* cubehash;
- GtkToggleButton* whirlpool;
-
- sha1 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_sha1" ) );
- sha224 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_sha224" ) );
- sha256 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_sha256" ) );
- sha384 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_sha384" ) );
- sha512 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_sha512" ) );
- md5 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_md5" ) );
- cubehash = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_cubehash" ) );
- whirlpool = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_whirlpool" ) );
-
- if ( gtk_toggle_button_get_active( sha1 ) )
- algos |= '\x01';
- if ( gtk_toggle_button_get_active( sha224 ) )
- algos |= '\x02';
- if ( gtk_toggle_button_get_active( sha256 ) )
- algos |= '\x04';
- if ( gtk_toggle_button_get_active( sha384 ) )
- algos |= '\x08';
- if ( gtk_toggle_button_get_active( sha512 ) )
- algos |= '\x10';
- if ( gtk_toggle_button_get_active( md5 ) )
- algos |= '\x20';
- if ( gtk_toggle_button_get_active( cubehash ) )
- algos |= '\x40';
- if ( gtk_toggle_button_get_active( whirlpool ) )
- algos |= '\x80';
-
- g_free( sha1 );
- g_free( sha224 );
- g_free( sha256 );
- g_free( sha384 );
- g_free( sha512 );
- g_free( md5 );
- g_free( cubehash );
- g_free( whirlpool );
-
- return algos;
-}
-
-G_MODULE_EXPORT void encrypt_step2_check_hashalgo( GtkWidget* button,
gpointer data ) {
- int seedlen = SHACrypt_GetLength( encrypt_step2_get_algos() );
- if ( !seedlen ) {
- GtkToggleButton* sha1;
- sha1 = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "check_e2_sha1" ) );
-
- gtk_toggle_button_set_active( sha1, TRUE );
-
- seedlen = 20;
- }
-
- GtkToggleButton* randomseed;
- GtkWidget* seed;
-
- randomseed = GTK_TOGGLE_BUTTON( gtk_builder_get_object(
builder, "radio_e2_randomseed_off" ) );
- seed = GTK_WIDGET( gtk_builder_get_object(
builder, "hscale_e2_randomseed" ) );
-
- if ( gtk_toggle_button_get_active( randomseed ) ) {
- gtk_widget_set_sensitive( seed, FALSE );
-
- gtk_range_set_value( GTK_RANGE( seed ), (gdouble)seedlen );
- } else {
- gtk_widget_set_sensitive( seed, TRUE );
- }
-
- g_free( randomseed );
- g_free( seed );
-}
-
-G_MODULE_EXPORT void encrypt_step3() {
- GtkWindow* step3;
- GtkEntry* pass;
- GtkFileChooser* file;
- GtkProgressBar* progress;
- GtkRange* seedlen;
-
- step3 = GTK_WINDOW( gtk_builder_get_object( builder, "encrypt_step3" )
);
- pass = GTK_ENTRY( gtk_builder_get_object(
builder, "field_e2_password1" ) );
- file = GTK_FILE_CHOOSER( gtk_builder_get_object(
builder, "file_e1_select" ) );
- progress = GTK_PROGRESS_BAR( gtk_builder_get_object(
builder, "progressbar_e3_progress" ) );
- seedlen = GTK_RANGE( gtk_builder_get_object(
builder, "hscale_e2_randomseed" ) );
-
- gtk_progress_bar_set_text( progress, NULL );
- gtk_window_set_deletable( step3, FALSE );
-
- FILE* f;
- FILE* o;
- unsigned long i, n,
- size;
- SHACrypt_Context s;
- unsigned char algos = encrypt_step2_get_algos();
- static char fbuf[256] = {0},
- obuf[256] = {0},
- tmp[1024] = {0};
- char* filename;
-
- filename = gtk_file_chooser_get_filename( file );
- g_free( file );
-
- n = (int)gtk_range_get_value( seedlen );
- g_free( seedlen );
-
- f = fopen( filename, "rb" );
-
- sprintf( tmp, "%s.shacrypt", filename );
-
- i = 0;
- while ( ( o = fopen( tmp, "rb" ) ) != NULL ) {
- g_free( o );
- i++;
- sprintf( tmp, "%s_%lu.shacrypt", filename, i );
- }
-
- o = fopen( tmp, "wb" );
-
- g_free( tmp );
- g_free( filename );
-
- for ( i = 0; i < n; i++ )
- fbuf[i] = g_random_int_range( 0, 255 );
-
- SHACrypt_Init( &s, (char*)gtk_entry_get_text( pass ),
gtk_entry_get_text_length( pass ), algos, fbuf, n );
- g_free( pass );
-
- fwrite( identifier, 1, 3, o ); // Identifier
- fwrite( "\2\0", 1, 2, o ); // Format version
- fputc( (unsigned char)(n - 1), o ); // Random seed length
- fwrite( fbuf, 1, n, o ); // Random seed
- fputc( algos, o ); // Hash alogithms used
-
- fseek( f, 0, SEEK_END );
- size = ftell( f );
- fseek( f, 0, SEEK_SET );
-
- i = 0;
-
- /* Do the actual encryption */
- while ( ( n = fread( fbuf, 1, 256, f ) ) > 0 ) {
- i += n;
-
- gtk_progress_bar_set_fraction( progress, (double)i / size );
-
- SHACrypt_Process( &s, fbuf, obuf, n );
-
- fwrite( obuf, 1, n, o );
- }
-
- fclose( f );
- fclose( o );
-
- g_free( f );
- g_free( o );
- g_free( fbuf );
- g_free( obuf );
-
- GtkEntry* pass1;
- GtkEntry* pass2;
- GtkProgressBar* meter;
-
- pass1 = GTK_ENTRY( gtk_builder_get_object(
builder, "field_e2_password1" ) );
- pass2 = GTK_ENTRY( gtk_builder_get_object(
builder, "field_e2_password2" ) );
- meter = GTK_PROGRESS_BAR( gtk_builder_get_object(
builder, "progressbar_e2_pass_strength" ) );
-
- gtk_entry_set_text( pass1, "" );
- gtk_entry_set_text( pass2, "" );
- gtk_progress_bar_set_text( meter, "Enter a password" );
- gtk_progress_bar_set_fraction( meter, 0.0 );
-
- g_free( pass1 );
- g_free( pass2 );
- g_free( meter );
-
- gtk_progress_bar_set_text( progress, "Done!" );
- gtk_window_set_deletable( step3, TRUE );
-
- g_free( progress );
- g_free( step3 );
-}
-
-G_MODULE_EXPORT void encrypt_step2_ok( GtkWidget* button, gpointer data ) {
- GtkNotebook* tabs;
- GtkEntry* pass1;
- GtkEntry* pass2;
-
- tabs = GTK_NOTEBOOK( gtk_builder_get_object(
builder, "notebook_e2_tabs" ) );
- pass1 = GTK_ENTRY( gtk_builder_get_object(
builder, "field_e2_password1" ) );
- pass2 = GTK_ENTRY( gtk_builder_get_object(
builder, "field_e2_password2" ) );
-
- if ( !gtk_entry_get_text_length( pass1 ) ) {
- gtk_notebook_set_current_page( tabs, 0 );
- gtk_widget_grab_focus( GTK_WIDGET( pass1 ) );
-
- g_free( pass1 );
- g_free( pass2 );
- g_free( tabs );
-
- return;
- }
-
- if ( !gtk_entry_get_text_length( pass2 ) ) {
- gtk_notebook_set_current_page( tabs, 0 );
- gtk_widget_grab_focus( GTK_WIDGET( pass2 ) );
-
- g_free( pass1 );
- g_free( pass2 );
- g_free( tabs );
-
- return;
- }
-
- g_free( tabs );
-
- if ( strcmp( gtk_entry_get_text( pass1 ), gtk_entry_get_text( pass2 )
) == 0 ) {
- GtkWidget* step2;
- GtkWidget* step3;
-
- step2 = GTK_WIDGET( gtk_builder_get_object(
builder, "encrypt_step2" ) );
- step3 = GTK_WIDGET( gtk_builder_get_object(
builder, "encrypt_step3" ) );
-
- gtk_widget_show( step3 );
- gtk_widget_hide( step2 );
-
- g_free( step2 );
- g_free( step3 );
-
- g_thread_create( (GThreadFunc)encrypt_step3, NULL, FALSE, NULL );
- } else {
- GtkProgressBar* meter;
-
- meter = GTK_PROGRESS_BAR( gtk_builder_get_object(
builder, "progressbar_e2_pass_strength" ) );
-
- gtk_progress_bar_set_text( meter, "Passwords do not match!" );
-
- g_free( meter );
- }
-
- g_free( pass1 );
- g_free( pass2 );
-}
-
-G_MODULE_EXPORT void encrypt_step2_cancel( GtkWidget* button, gpointer
data ) {
- GtkWidget* step2;
- GtkEntry* pass1;
- GtkEntry* pass2;
- GtkProgressBar* meter;
-
- step2 = GTK_WIDGET( gtk_builder_get_object( builder, "encrypt_step2" )
);
- pass1 = GTK_ENTRY( gtk_builder_get_object(
builder, "field_e2_password1" ) );
- pass2 = GTK_ENTRY( gtk_builder_get_object(
builder, "field_e2_password2" ) );
- meter = GTK_PROGRESS_BAR( gtk_builder_get_object(
builder, "progressbar_e2_pass_strength" ) );
-
- gtk_widget_hide( step2 );
-
- gtk_entry_set_text( pass1, "" );
- gtk_entry_set_text( pass2, "" );
- gtk_progress_bar_set_text( meter, "Enter a password" );
- gtk_progress_bar_set_fraction( meter, 0.0 );
-
- g_free( step2 );
- g_free( pass1 );
- g_free( pass2 );
- g_free( meter );
-}
-
-/* Decryption */
-G_MODULE_EXPORT void button_pressed_decrypt( GtkWidget* button, gpointer
data ) {
- GtkWidget* step1;
- step1 = GTK_WIDGET( gtk_builder_get_object( builder, "decrypt_step1" )
);
-
- gtk_widget_show( step1 );
-
- g_free( step1 );
-}
-
-G_MODULE_EXPORT void decrypt_step1_ok( GtkWidget* button, gpointer data ) {
- GtkFileChooser* file;
-
- file = GTK_FILE_CHOOSER( gtk_builder_get_object(
builder, "file_d1_select" ) );
-
- // Make sure there's actually a file selected.
- if ( gtk_file_chooser_get_filename( file ) == NULL ) {
- g_free( file );
- return;
- }
-
- // Make sure it's an SHACrypt file.
- FILE* f;
- char fbuf[5];
-
- f = fopen( gtk_file_chooser_get_filename( file ), "rb" );
- g_free( file );
-
- if ( f == NULL || fread( fbuf, 1, 5, f ) != 5 )
- strcpy( fbuf, "fail." ); // Make sure we have all 5 bytes set.
-
- if ( f != NULL ) {
- fclose( f );
-
- g_free( f );
- }
-
- if ( strncmp( fbuf, identifier, 3 ) != 0 || fbuf[3] < '\1' || fbuf[3]
> '\2' || fbuf[4] != '\0' ) {
- g_free( fbuf );
-
- GtkWidget* invalid_file;
-
- invalid_file = GTK_WIDGET( gtk_builder_get_object(
builder, "decrypt_step1_error_notshacrypt" ) );
-
- gtk_widget_show( invalid_file );
-
- g_free( invalid_file );
-
- return;
- }
-
- GtkWidget* step1;
- GtkWidget* step2;
-
- step1 = GTK_WIDGET( gtk_builder_get_object( builder, "decrypt_step1" )
);
- step2 = GTK_WIDGET( gtk_builder_get_object( builder, "decrypt_step2" )
);
-
- gtk_widget_show( step2 );
- gtk_widget_hide( step1 );
-
- g_free( step1 );
- g_free( step2 );
-}
-
-G_MODULE_EXPORT void decrypt_step1_cancel( GtkWidget* button, gpointer
data ) {
- GtkWidget* step1;
- step1 = GTK_WIDGET( gtk_builder_get_object( builder, "decrypt_step1" )
);
-
- gtk_widget_hide( step1 );
-
- g_free( step1 );
-}
-
-G_MODULE_EXPORT void decrypt_step1_error_ok( GtkWidget* button, gpointer
data ) {
- GtkWidget* error;
- error = GTK_WIDGET( gtk_builder_get_object(
builder, "decrypt_step1_error_notshacrypt" ) );
-
- gtk_widget_hide( error );
-
- g_free( error );
-}
-
-G_MODULE_EXPORT void decrypt_step3() {
- GtkWindow* step3;
- GtkEntry* pass;
- GtkFileChooser* file;
- GtkProgressBar* progress;
-
- step3 = GTK_WINDOW( gtk_builder_get_object( builder, "decrypt_step3" )
);
- pass = GTK_ENTRY( gtk_builder_get_object( builder, "field_d2_password"
) );
- file = GTK_FILE_CHOOSER( gtk_builder_get_object(
builder, "file_d1_select" ) );
- progress = GTK_PROGRESS_BAR( gtk_builder_get_object(
builder, "progressbar_d3_progress" ) );
-
- gtk_progress_bar_set_text( progress, NULL );
- gtk_window_set_deletable( step3, FALSE );
-
- FILE* f;
- FILE* o;
- unsigned long i, size, n;
- SHACrypt_Context s;
- unsigned char algos = '\0',
- randlen = '\0';
- static char fbuf[256] = {0},
- obuf[256] = {0};
- char** filename = g_strsplit( gtk_file_chooser_get_filename( file
), ".", -1 );
- char* filename_prefix;
- char* filename_suffix;
- char* tmp;
-
- g_free( file );
-
- f = fopen( g_strjoinv( ".", filename ), "rb" );
-
- i = g_strv_length( filename );
-
- if ( i == 2 ) {
- filename_suffix = "";
- filename_prefix = g_strdup( filename[0] );
- } else {
- n = strlen( filename[i - 1] ) + strlen( filename[i - 2] ) + 2;
-
- filename_suffix = g_strconcat( ".", filename[i - 2], NULL );
-
- tmp = g_strjoinv( ".", filename );
- filename_prefix = g_strndup( tmp, strlen( tmp ) - n );
- g_free( tmp );
- }
- g_strfreev( filename );
-
- tmp = g_strdup_printf( "%s%s", filename_prefix, filename_suffix );
-
-
- i = 0;
- while ( fopen( tmp, "rb" ) != NULL ) {
- g_free( tmp );
- i++;
- tmp = g_strdup_printf( "%s_%lu%s", filename_prefix, i,
filename_suffix );
- }
-
- o = fopen( tmp, "wb" );
-
- g_free( tmp );
- g_free( filename_prefix );
- g_free( filename_suffix );
-
- fread( fbuf, 1, 5, f );
-
- if ( fbuf[3] == '\1' ) {
- randlen = '\x13';
- fread( fbuf, 1, 20, f );
- algos = '\x01';
- }
- if ( fbuf[3] == '\2' ) {
- randlen = fgetc( f );
- fread( fbuf, 1, (int)randlen + 1, f );
- algos = fgetc( f );
- }
-
- SHACrypt_Init( &s, g_strdup( gtk_entry_get_text( pass ) ),
gtk_entry_get_text_length( pass ), algos, fbuf, (int)randlen + 1 );
-
- gtk_entry_set_text( pass, "" );
-
- g_free( pass );
-
- i = ftell( f );
- fseek( f, 0, SEEK_END );
- size = ftell( f ) - i;
- fseek( f, i, SEEK_SET );
-
- i = 0;
- /* Do the actual encryption */
- while ( ( n = fread( fbuf, 1, 256, f ) ) > 0 ) {
- i += n;
-
- gtk_progress_bar_set_fraction( progress, (double)i / size );
-
- SHACrypt_Process( &s, fbuf, obuf, n );
-
- fwrite( obuf, 1, n, o );
- }
-
- fclose( f );
- fclose( o );
-
- g_free( f );
- g_free( o );
- g_free( fbuf );
- g_free( obuf );
-
- gtk_progress_bar_set_text( progress, "Done!" );
- gtk_window_set_deletable( step3, TRUE );
-
- g_free( progress );
- g_free( step3 );
-}
-
-G_MODULE_EXPORT void decrypt_step2_ok( GtkWidget* button, gpointer data ) {
- GtkEntry* pass;
-
- pass = GTK_ENTRY( gtk_builder_get_object( builder, "field_d2_password"
) );
-
- if ( !gtk_entry_get_text_length( pass ) ) {
- gtk_widget_grab_focus( GTK_WIDGET( pass ) );
-
- g_free( pass );
-
- return;
- }
- g_free( pass );
-
- GtkWidget* step2;
- GtkWidget* step3;
-
- step2 = GTK_WIDGET( gtk_builder_get_object( builder, "decrypt_step2" )
);
- step3 = GTK_WIDGET( gtk_builder_get_object( builder, "decrypt_step3" )
);
-
- gtk_widget_show( step3 );
- gtk_widget_hide( step2 );
-
- g_free( step2 );
- g_free( step3 );
-
- g_thread_create( (GThreadFunc)decrypt_step3, NULL, FALSE, NULL );
-}
-
-G_MODULE_EXPORT void decrypt_step2_cancel( GtkWidget* button, gpointer
data ) {
- GtkWidget* step2;
- GtkEntry* pass;
-
- step2 = GTK_WIDGET( gtk_builder_get_object( builder, "decrypt_step2" )
);
- pass = GTK_ENTRY( gtk_builder_get_object( builder, "field_d2_password"
) );
-
- gtk_widget_hide( step2 );
- gtk_entry_set_text( pass, "" );
-
- g_free( step2 );
- g_free( pass );
-}
-
-/* Asymmetric */
-G_MODULE_EXPORT void button_pressed_asymmetric( GtkWidget* button,
gpointer data ) {
- GtkWidget* step1;
- step1 = GTK_WIDGET( gtk_builder_get_object(
builder, "asymmetric_step1" ) );
-
- gtk_widget_show( step1 );
-
- g_free( step1 );
-}
-
-G_MODULE_EXPORT void asymmetric_step1_cancel( GtkWidget* button, gpointer
data ) {
- GtkWidget* step1;
- step1 = GTK_WIDGET( gtk_builder_get_object(
builder, "asymmetric_step1" ) );
-
- gtk_widget_hide( step1 );
-
- g_free( step1 );
-}
-
-G_MODULE_EXPORT void asymmetric_step1_ok( GtkWidget* button, gpointer data
) {
- GtkFileChooser* file;
-
- file = GTK_FILE_CHOOSER( gtk_builder_get_object(
builder, "file_a1_select" ) );
-
- // Make sure there's actually a file selected.
- if ( gtk_file_chooser_get_filename( file ) == NULL ) {
- g_free( file );
- return;
- }
-
- // Make sure it's an SHACrypt file.
- FILE* f;
- char fbuf[5];
-
- f = fopen( gtk_file_chooser_get_filename( file ), "rb" );
- g_free( file );
-
- if ( f == NULL || fread( fbuf, 1, 5, f ) != 5 )
- strcpy( fbuf, "fail." ); // Make sure we have all 5 bytes set.
-
- if ( f != NULL ) {
- fclose( f );
-
- g_free( f );
- }
-
- if ( strncmp( fbuf, identifier, 3 ) != 0 || fbuf[3] < '\1' || fbuf[3]
> '\2' || fbuf[4] != '\0' ) {
- g_free( fbuf );
-
- GtkWidget* invalid_file;
-
- invalid_file = GTK_WIDGET( gtk_builder_get_object(
builder, "asymmetric_step1_error_notshacrypt" ) );
-
- gtk_widget_show( invalid_file );
-
- g_free( invalid_file );
-
- return;
- }
-
- // Now on to the actual displaying part.
- GtkWidget* step1;
- GtkWidget* step2;
-
- step1 = GTK_WIDGET( gtk_builder_get_object(
builder, "asymmetric_step1" ) );
- step2 = GTK_WIDGET( gtk_builder_get_object(
builder, "asymmetric_step2" ) );
-
- gtk_widget_show( step2 );
- gtk_widget_hide( step1 );
-
- g_free( step1 );
- g_free( step2 );
-}
-
-/* Password scoring method adapted from
- * http://www.geekwisdom.com/js/passwordmeter.js
- */
-G_MODULE_EXPORT void asymmetric_step2_passchange( GtkEntry* button,
gpointer data ) {
- GtkProgressBar* meter;
-
- meter = GTK_PROGRESS_BAR( gtk_builder_get_object(
builder, "progressbar_a2_pass_strength" ) );
-
- int len = gtk_entry_get_text_length( button );
- const char* pass = gtk_entry_get_text( button );
-
- if ( len == 0 ) {
- gtk_progress_bar_set_fraction( meter, 0.0 );
- gtk_progress_bar_set_text( meter, "Enter a password." );
-
- g_free( meter );
-
- return;
- }
-
- int score, i,
- lower = 0,
- upper = 0,
- num = 0,
- symb = 0;
-
- // Total length
- if ( len > 15 ) {
- score = 18;
- } else if ( len > 7 ) {
- score = 12;
- } else if ( len > 4 ) {
- score = 6;
- } else {
- score = 3;
- }
-
- for ( i = 0; i < len; i++ ) {
- if ( pass[i] >= 'a' && pass[i] <= 'z' )
- lower++;
- else if ( pass[i] >= 'A' && pass[i] <= 'Z' )
- upper++;
- else if ( pass[i] >= '0' && pass[i] <= '9' )
- num++;
- else
- symb++;
- }
-
- // Letters
- if ( lower || upper )
- score += 1;
- if ( lower && upper )
- score += 2;
- if ( lower + upper > 1 )
- score += 2;
- if ( lower > 1 && upper > 1 )
- score += 2;
-
- // Numbers
- if ( num == 1 )
- score += 5;
- if ( num > 1 )
- score += 7;
-
- // Symbols
- if ( symb == 1 )
- score += 5;
- if ( symb > 1 )
- score += 7;
-
- // Combinations
- if ( ( upper || lower ) && num )
- score++;
- if ( upper && lower )
- score++;
- if ( ( upper || lower ) && num && symb )
- score += 2;
- if ( upper && lower && num && symb )
- score += 2;
-
- gtk_progress_bar_set_fraction( meter, score / 45.0 );
- if ( score == 45 )
- gtk_progress_bar_set_text( meter, "Excellent" );
- else if ( score > 39 )
- gtk_progress_bar_set_text( meter, "Secure" );
- else if ( score > 24 )
- gtk_progress_bar_set_text( meter, "Good" );
- else if ( score > 9 )
- gtk_progress_bar_set_text( meter, "Ok" );
- else
- gtk_progress_bar_set_text( meter, "Bad" );
-
- g_free( meter );
-}
-
-G_MODULE_EXPORT void asymmetric_step3() {
- GtkWindow* step3;
- GtkEntry* pass;
- GtkFileChooser* file;
- GtkProgressBar* progress;
-
- step3 = GTK_WINDOW( gtk_builder_get_object(
builder, "asymmetric_step3" ) );
- pass = GTK_ENTRY( gtk_builder_get_object(
builder, "field_a2_password1" ) );
- file = GTK_FILE_CHOOSER( gtk_builder_get_object(
builder, "file_a1_select" ) );
- progress = GTK_PROGRESS_BAR( gtk_builder_get_object(
builder, "progressbar_a3_progress" ) );
-
- gtk_progress_bar_set_text( progress, NULL );
- gtk_window_set_deletable( step3, FALSE );
-
- FILE* f;
- FILE* o;
- unsigned long i, size, n;
- SHACrypt_Context s;
- unsigned char algos = '\0',
- randlen = '\0';
- static char fbuf[256] = {0},
- obuf[256] = {0};
- char* filename = gtk_file_chooser_get_filename( file );
- char* tmp;
-
- g_free( file );
-
- f = fopen( filename, "rb" );
-
- filename = g_strndup( filename, strlen( filename ) - 9 );
-
- tmp = g_strdup_printf( "%s_1.shacrypt", filename );
-
- i = 1;
- while ( fopen( tmp, "rb" ) != NULL ) {
- g_free( tmp );
- i++;
- tmp = g_strdup_printf( "%s_%lu.shacrypt", filename, i );
- }
-
- o = fopen( tmp, "wb" );
-
- g_free( tmp );
- g_free( filename );
-
- fread( fbuf, 1, 5, f );
-
- if ( fbuf[3] == '\1' ) {
- randlen = '\x13';
- fread( fbuf, 1, 20, f );
- algos = '\x01';
- }
- if ( fbuf[3] == '\2' ) {
- randlen = fgetc( f );
- fread( fbuf, 1, (int)randlen + 1, f );
- algos = fgetc( f );
- }
-
- fwrite( identifier, 1, 3, o );
- fwrite( "\2\0", 1, 2, o );
- fputc( randlen, o );
- fwrite( fbuf, 1, (int)randlen + 1, o );
- fputc( algos, o );
-
- SHACrypt_Init( &s, g_strdup( gtk_entry_get_text( pass ) ),
gtk_entry_get_text_length( pass ), algos, fbuf, (int)randlen + 1 );
-
- gtk_entry_set_text( pass, "" );
-
- g_free( pass );
-
- i = ftell( f );
- fseek( f, 0, SEEK_END );
- size = ftell( f ) - i;
- fseek( f, i, SEEK_SET );
-
- i = 0;
- /* Do the actual encryption */
- while ( ( n = fread( fbuf, 1, 256, f ) ) > 0 ) {
- i += n;
-
- gtk_progress_bar_set_fraction( progress, (double)i / size );
-
- SHACrypt_Process( &s, fbuf, obuf, n );
-
- fwrite( obuf, 1, n, o );
- }
-
- fclose( f );
- fclose( o );
-
- g_free( f );
- g_free( o );
- g_free( fbuf );
- g_free( obuf );
***The diff for this file has been truncated for email.***
=======================================
--- /padlock.ico Sun Nov 15 14:25:05 2009
+++ /dev/null
Binary file, no diff available.
=======================================
--- /padlock.svg Sun Nov 15 14:25:05 2009
+++ /dev/null
@@ -1,945 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<!-- Original from the Tango Desktop Project
<http://tango.freedesktop.org/>
- Modified by Nightgunner5 -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="48px"
- height="48px"
- id="svg1381"
- sodipodi:version="0.32"
- inkscape:version="0.46"
- sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/status"
- sodipodi:docname="padlock.svg"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- inkscape:export-xdpi="120"
- inkscape:export-ydpi="120">
- <defs
- id="defs1383">
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 24 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="48 : 24 : 1"
- inkscape:persp3d-origin="24 : 16 : 1"
- id="perspective2653" />
- <linearGradient
- id="linearGradient7613">
- <stop
- style="stop-color: rgb(255, 255, 255); stop-opacity: 0;"
- offset="0"
- id="stop7615" />
- <stop
- style="stop-color: rgb(255, 255, 255); stop-opacity: 1;"
- offset="1"
- id="stop7617" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient7601">
- <stop
- style="stop-color: rgb(255, 255, 255); stop-opacity: 1;"
- offset="0"
- id="stop7603" />
- <stop
- style="stop-color: rgb(255, 255, 255); stop-opacity: 0;"
- offset="1"
- id="stop7605" />
- </linearGradient>
- <linearGradient
- id="linearGradient5820">
- <stop
- id="stop6704"
- offset="0"
- style="stop-color: rgb(0, 0, 0); stop-opacity: 0;" />
- <stop
- style="stop-color: rgb(0, 0, 0); stop-opacity: 0;"
- offset="0.60799319"
- id="stop6706" />
- <stop
- style="stop-color: rgb(0, 0, 0); stop-opacity: 1;"
- offset="1"
- id="stop5824" />
- </linearGradient>
- <linearGradient
- id="linearGradient4135">
- <stop
- style="stop-color:#360089;stop-opacity:1;"
- offset="0"
- id="stop4137" />
- <stop
- style="stop-color:#4000a1;stop-opacity:0;"
- offset="1"
- id="stop4139" />
- </linearGradient>
- <linearGradient
- id="linearGradient3505">
- <stop
- style="stop-color:#7641ff;stop-opacity:1;"
- offset="0"
- id="stop3509" />
- <stop
- id="stop3513"
- offset="1"
- style="stop-color:#5700c3;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- y2="6.0396547"
- x2="16.198252"
- y1="9.6635771"
- x1="19.250618"
- gradientTransform="translate(0, -1.92628)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient1394"
- xlink:href="#linearGradient11335"
- inkscape:collect="always" />
- <linearGradient
- y2="17.470011"
- x2="27.192274"
- y1="2.9136841"
- x1="10.650842"
- gradientTransform="translate(0, -1.92628)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient1392"
- xlink:href="#linearGradient10591"
- inkscape:collect="always" />
- <linearGradient
- y2="26.024691"
- x2="27.824219"
- y1="22.739454"
- x1="27.812500"
- gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
32.8977)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2324"
- xlink:href="#linearGradient5741"
- inkscape:collect="always" />
- <linearGradient
- y2="26.024691"
- x2="27.824219"
- y1="22.739454"
- x1="27.812500"
- gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
30.8977)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2322"
- xlink:href="#linearGradient5741"
- inkscape:collect="always" />
- <linearGradient
- y2="26.024691"
- x2="27.824219"
- y1="22.739454"
- x1="27.812500"
- gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
28.8977)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2320"
- xlink:href="#linearGradient5741"
- inkscape:collect="always" />
- <linearGradient
- y2="26.024691"
- x2="27.824219"
- y1="22.739454"
- x1="27.812500"
- gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
26.8977)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2318"
- xlink:href="#linearGradient5741"
- inkscape:collect="always" />
- <linearGradient
- y2="26.024691"
- x2="27.824219"
- y1="22.739454"
- x1="27.812500"
- gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
24.8977)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2316"
- xlink:href="#linearGradient5741"
- inkscape:collect="always" />
- <linearGradient
- y2="26.024691"
- x2="27.824219"
- y1="22.739454"
- x1="27.812500"
- gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
22.8977)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2314"
- xlink:href="#linearGradient5741"
- inkscape:collect="always" />
- <linearGradient
- y2="26.024691"
- x2="27.824219"
- y1="22.739454"
- x1="27.812500"
- gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
20.8977)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2312"
- xlink:href="#linearGradient5741"
- inkscape:collect="always" />
- <linearGradient
- y2="26.024691"
- x2="27.824219"
- y1="22.739454"
- x1="27.812500"
- gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
18.8977)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2310"
- xlink:href="#linearGradient5741"
- inkscape:collect="always" />
- <linearGradient
- y2="26.024691"
- x2="27.824219"
- y1="22.739454"
- x1="27.812500"
- gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
16.8977)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2308"
- xlink:href="#linearGradient5741"
- inkscape:collect="always" />
- <linearGradient
- y2="26.024691"
- x2="27.824219"
- y1="22.739454"
- x1="27.812500"
- gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
14.8977)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient2306"
- xlink:href="#linearGradient5741"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient9845">
- <stop
- id="stop9847"
- offset="0"
- style="stop-color: rgb(255, 255, 255); stop-opacity: 1;" />
- <stop
- id="stop9849"
- offset="1.0000000"
- style="stop-color: rgb(255, 255, 255); stop-opacity: 0.494845;" />
- </linearGradient>
- <linearGradient
- id="linearGradient10591">
- <stop
- id="stop10593"
- offset="0.0000000"
- style="stop-color: rgb(202, 208, 198); stop-opacity: 1;" />
- <stop
- style="stop-color: rgb(234, 236, 233); stop-opacity: 1;"
- offset="0.50000000"
- id="stop10599" />
- <stop
- id="stop10595"
- offset="1.0000000"
- style="stop-color: rgb(197, 203, 192); stop-opacity: 1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient11327">
- <stop
- id="stop11329"
- offset="0"
- style="stop-color:#32007d;stop-opacity:1;" />
- <stop
- id="stop11331"
- offset="1"
- style="stop-color:#4b00be;stop-opacity:1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient11335">
- <stop
- id="stop11337"
- offset="0"
- style="stop-color: rgb(111, 113, 109); stop-opacity: 1;" />
- <stop
- id="stop11339"
- offset="1.0000000"
- style="stop-color: rgb(158, 160, 156); stop-opacity: 1;" />
- </linearGradient>
- <linearGradient
- id="linearGradient12071"
- inkscape:collect="always">
- <stop
- id="stop12073"
- offset="0"
- style="stop-color: rgb(255, 255, 255); stop-opacity: 1;" />
- <stop
- id="stop12075"
- offset="1"
- style="stop-color: rgb(255, 255, 255); stop-opacity: 0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient5741">
- <stop
- id="stop5743"
- offset="0"
- style="stop-color:#360089;stop-opacity:1;" />
- <stop
- id="stop5745"
- offset="1"
- style="stop-color:#4000a1;stop-opacity:0.26666668;" />
- </linearGradient>
- <linearGradient
- id="linearGradient2092">
- <stop
- style="stop-color:#6900ea;stop-opacity:0.71372551;"
- offset="0"
- id="stop2094" />
- <stop
- id="stop2098"
- offset="0.20999999"
- style="stop-color:#7641ff;stop-opacity:1;" />
- <stop
- style="stop-color:#6600e2;stop-opacity:1;"
- offset="0.83999997"
- id="stop2293" />
- <stop
- style="stop-color:#5700c3;stop-opacity:1;"
- offset="1"
- id="stop2100" />
- </linearGradient>
- <radialGradient
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1, 0, 0, 0.651376, 4.75661e-15, 10.7575)"
- r="15.571428"
- fy="30.857143"
- fx="22.571428"
- cy="30.857143"
- cx="22.571428"
- id="radialGradient3564"
- xlink:href="#linearGradient3558"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient3558"
- inkscape:collect="always">
- <stop
- id="stop3560"
- offset="0"
- style="stop-color: rgb(0, 0, 0); stop-opacity: 1;" />
- <stop
- id="stop3562"
- offset="1"
- style="stop-color: rgb(0, 0, 0); stop-opacity: 0;" />
- </linearGradient>
- <linearGradient
- id="linearGradient2298"
- inkscape:collect="always">
- <stop
- id="stop2300"
- offset="0"
- style="stop-color: rgb(255, 255, 255); stop-opacity: 1;" />
- <stop
- id="stop2302"
- offset="1"
- style="stop-color: rgb(255, 255, 255); stop-opacity: 0;" />
- </linearGradient>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2298"
- id="radialGradient1572"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(2.53109, -2.90183e-16, 6.08002e-09,
2.86055, -19.6679, -16.3393)"
- cx="12.845672"
- cy="13.342374"
- fx="12.845672"
- fy="13.342374"
- r="17" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9845"
- id="linearGradient1575"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.999112, 0, 0, 1.0958, 0.0364214,
-4.13973)"
- x1="10.907269"
- y1="25.002281"
- x2="30.875446"
- y2="36.127281" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2092"
- id="linearGradient1578"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1, 0, 0, 1.08988, 0, -5.10979)"
- x1="6.7268200"
- y1="32.161697"
- x2="40.938126"
- y2="32.161697" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient11327"
- id="linearGradient1580"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1, 0, 0, 1.08988, 0, -3.9869)"
- x1="31.630468"
- y1="41.791817"
- x2="8.6713638"
- y2="25.793524" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient3505"
- id="linearGradient1591"
- x1="24.875"
- y1="21"
- x2="24.75"
- y2="17"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(0, 1)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient12071"
- id="linearGradient1387"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1, 0, 0, 0.951923, 0, 1.97596)"
- x1="21.941509"
- y1="21.550869"
- x2="21.941509"
- y2="18.037588" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5741"
- id="linearGradient1411"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
14.8977)"
- x1="27.812500"
- y1="22.739454"
- x2="27.824219"
- y2="26.024691" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5741"
- id="linearGradient1413"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
16.8977)"
- x1="27.812500"
- y1="22.739454"
- x2="27.824219"
- y2="26.024691" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5741"
- id="linearGradient1415"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
18.8977)"
- x1="27.812500"
- y1="22.739454"
- x2="27.824219"
- y2="26.024691" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5741"
- id="linearGradient1417"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
20.8977)"
- x1="27.812500"
- y1="22.739454"
- x2="27.824219"
- y2="26.024691" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5741"
- id="linearGradient1419"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
22.8977)"
- x1="27.812500"
- y1="22.739454"
- x2="27.824219"
- y2="26.024691" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5741"
- id="linearGradient1421"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
24.8977)"
- x1="27.812500"
- y1="22.739454"
- x2="27.824219"
- y2="26.024691" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5741"
- id="linearGradient1423"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
26.8977)"
- x1="27.812500"
- y1="22.739454"
- x2="27.824219"
- y2="26.024691" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5741"
- id="linearGradient1425"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
28.8977)"
- x1="27.812500"
- y1="22.739454"
- x2="27.824219"
- y2="26.024691" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5741"
- id="linearGradient1427"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
30.8977)"
- x1="27.812500"
- y1="22.739454"
- x2="27.824219"
- y2="26.024691" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5741"
- id="linearGradient1429"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.23077, 0, 0, 0.32409, -5.53846,
32.8977)"
- x1="27.812500"
- y1="22.739454"
- x2="27.824219"
- y2="26.024691" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5741"
- id="linearGradient2307"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.31236, 0, 1.79906e-17, 0.32409,
-1.15639, 5.66949)"
- x1="27.812500"
- y1="22.739454"
- x2="27.824219"
- y2="26.024691" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5741"
- id="linearGradient2311"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.31236, 0, 1.79906e-17, 0.32409,
-1.15639, 3.66949)"
- x1="27.812500"
- y1="22.739454"
- x2="27.824219"
- y2="26.024691" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5741"
- id="linearGradient2315"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.31236, 0, 1.79906e-17, 0.32409,
-1.15639, 1.66949)"
- x1="27.812500"
- y1="22.739454"
- x2="27.824219"
- y2="26.024691" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5741"
- id="linearGradient2319"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.31236, 0, 1.79906e-17, 0.32409,
-1.15639, -0.330512)"
- x1="27.812500"
- y1="22.739454"
- x2="27.824219"
- y2="26.024691" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5741"
- id="linearGradient2323"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.31236, 0, 1.79906e-17, 0.32409,
-1.15639, -2.33051)"
- x1="27.812500"
- y1="22.739454"
- x2="27.824219"
- y2="26.024691" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5741"
- id="linearGradient2326"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.31236, 0, 1.79906e-17, 0.32409,
-1.15639, -4.33051)"
- x1="27.812500"
- y1="22.739454"
- x2="27.824219"
- y2="26.024691" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5741"
- id="linearGradient2329"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.31236, 0, 1.79906e-17, 0.32409,
-1.15639, -6.33051)"
- x1="27.812500"
- y1="22.739454"
- x2="27.824219"
- y2="26.024691" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5741"
- id="linearGradient2332"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.31236, 0, 1.79906e-17, 0.32409,
-1.15639, -8.33051)"
- x1="27.812500"
- y1="22.739454"
- x2="27.824219"
- y2="26.024691" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5741"
- id="linearGradient2335"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.31236, 0, 1.79906e-17, 0.32409,
-1.15639, -10.3305)"
- x1="27.812500"
- y1="22.739454"
- x2="27.824219"
- y2="26.024691" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5741"
- id="linearGradient2338"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.31236, 0, 1.79906e-17, 0.32409,
-1.15639, -12.3305)"
- x1="27.812500"
- y1="22.739454"
- x2="27.824219"
- y2="26.024691" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient7601"
- id="linearGradient7607"
- x1="16.529249"
- y1="-0.3973901"
- x2="14.614914"
- y2="12.436604"
- gradientUnits="userSpaceOnUse" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient7613"
- id="radialGradient7611"
- cx="30.996042"
- cy="13.156409"
- fx="30.996042"
- fy="13.156409"
- r="1.000184"
- gradientTransform="matrix(-5.31617e-07, 14.969, -8.27668,
0.000396883, 143.895, -454.272)"
- gradientUnits="userSpaceOnUse" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient9845"
- id="radialGradient7619"
- cx="12.184196"
- cy="8.5463438"
- fx="12.184196"
- fy="8.5463438"
- r="3.6037733"
- gradientTransform="matrix(-0.441342, 3.78696, -3.28591, -0.382939,
47.9182, -38.4483)"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4135"
- id="linearGradient3433"
- x1="39.25959"
- y1="1.1983697"
- x2="47.449375"
- y2="1.1983697"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4135"
- id="linearGradient3437"
- gradientUnits="userSpaceOnUse"
- x1="39.25959"
- y1="1.1983697"
- x2="47.449375"
- y2="1.1983697" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="8"
- inkscape:cx="21.351181"
- inkscape:cy="24.483406"
- inkscape:current-layer="layer1"
- showgrid="false"
- inkscape:grid-bbox="true"
- inkscape:document-units="px"
- showguides="true"
- inkscape:guide-bbox="true"
- fill="#c4a000"
- inkscape:window-width="872"
- inkscape:window-height="667"
- inkscape:window-x="545"
- inkscape:window-y="200"
- showborder="false"
- inkscape:showpageshadow="false">
- <inkscape:grid
- id="GridFromPre046Settings"
- type="xygrid"
- originx="0px"
- originy="0px"
- spacingx="0.5px"
- spacingy="0.5px"
- color="#0000ff"
- empcolor="#0000ff"
- opacity="0.2"
- empopacity="0.4"
- empspacing="2" />
- </sodipodi:namedview>
- <metadata
- id="metadata1386">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title>Lock</dc:title>
- <dc:date />
- <dc:creator>
- <cc:Agent>
- <dc:title>Andreas Nilsson</dc:title>
- </cc:Agent>
- </dc:creator>
- <dc:subject>
- <rdf:Bag>
- <rdf:li>lock</rdf:li>
- <rdf:li>key</rdf:li>
- <rdf:li>secure</rdf:li>
- </rdf:Bag>
- </dc:subject>
- <dc:contributor>
- <cc:Agent>
- <dc:title>Jakub Steiner,
-Lapo Calamandrei</dc:title>
- </cc:Agent>
- </dc:contributor>
- <cc:license
- rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
- </cc:Work>
- <cc:License
- rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
- <cc:permits
- rdf:resource="http://web.resource.org/cc/Reproduction" />
- <cc:permits
- rdf:resource="http://web.resource.org/cc/Distribution" />
- <cc:requires
- rdf:resource="http://web.resource.org/cc/Notice" />
- <cc:requires
- rdf:resource="http://web.resource.org/cc/Attribution" />
- <cc:permits
- rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
- <cc:requires
- rdf:resource="http://web.resource.org/cc/ShareAlike" />
- </cc:License>
- </rdf:RDF>
- </metadata>
- <g
- id="layer1"
- inkscape:label="Layer 1"
- inkscape:groupmode="layer">
- <path
- inkscape:r_cy="true"
- inkscape:r_cx="true"
- sodipodi:type="arc"
- style="opacity: 0.473684; color: rgb(0, 0, 0); fill:
url("#radialGradient3564") rgb(0, 0, 0); fill-opacity: 1;
fill-rule: nonzero; stroke: none; stroke-width: 1; stroke-linecap: round;
stroke-linejoin: round; marker: none; stroke-miterlimit: 4;
stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1;
visibility: visible; display: inline; overflow: visible;"
- id="path3556"
- sodipodi:cx="22.571428"
- sodipodi:cy="30.857143"
- sodipodi:rx="15.571428"
- sodipodi:ry="10.142858"
- d="M 38.142857 30.857143 A 15.571428 10.142858 0 1 1 7,30.857143 A
15.571428 10.142858 0 1 1 38.142857 30.857143 z"
- transform="matrix(1.44023, 0, 0, 0.419014, -8.58157, 29.8204)" />
- <rect
- style="fill: url("#linearGradient1578") rgb(0, 0, 0);
fill-opacity: 1; fill-rule: evenodd; stroke:
url("#linearGradient1580") rgb(0, 0, 0); stroke-width: 0.999999;
stroke-linecap: round; stroke-linejoin: round; stroke-miterlimit: 4;
stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1;"
- id="rect1314"
- width="34.993771"
- height="27.009277"
- x="6.5"
- y="17.5"
- rx="2.2349751"
- ry="2.2570534"
- inkscape:r_cx="true"
- inkscape:r_cy="true" />
- <rect
- style="fill: none; fill-opacity: 1; fill-rule: evenodd; stroke:
url("#linearGradient1575") rgb(0, 0, 0); stroke-width: 1;
stroke-linecap: round; stroke-linejoin: round; stroke-miterlimit: 4;
stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 0.601093;"
- id="rect6903"
- width="33.000904"
- height="25.006882"
- x="7.5"
- y="18.5"
- rx="1.288511"
- ry="1.288511"
- inkscape:r_cx="true"
- inkscape:r_cy="true" />
- <g
- inkscape:r_cy="true"
- inkscape:r_cx="true"
- id="g2281"
- style="opacity: 1;"
- transform="matrix(1.06629, 0, 0, 1, -1.59099, 0)">
- <rect
- inkscape:r_cy="true"
- inkscape:r_cx="true"
- ry="0"
- rx="0"
- y="23"
- x="8"
- height="0.97227097"
- width="32"
- id="rect5013"
- style="opacity: 0.5; fill: url("#linearGradient2306")
rgb(0, 0, 0); fill-opacity: 1; fill-rule: evenodd; stroke: none;
stroke-width: 1; stroke-linecap: round; stroke-linejoin: miter;
stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt;
stroke-opacity: 1;" />
- <rect
- inkscape:r_cy="true"
- inkscape:r_cx="true"
- style="opacity: 0.5; fill: url("#linearGradient2308")
rgb(0, 0, 0); fill-opacity: 1; fill-rule: evenodd; stroke: none;
stroke-width: 1; stroke-linecap: round; stroke-linejoin: miter;
stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt;
stroke-opacity: 1;"
- id="rect2245"
- width="32"
- height="0.97227097"
- x="8"
- y="25"
- rx="0"
- ry="0" />
- <rect
- inkscape:r_cy="true"
- inkscape:r_cx="true"
- ry="0"
- rx="0"
- y="27"
- x="8"
- height="0.97227097"
- width="32"
- id="rect2249"
- style="opacity: 0.5; fill: url("#linearGradient2310")
rgb(0, 0, 0); fill-opacity: 1; fill-rule: evenodd; stroke: none;
stroke-width: 1; stroke-linecap: round; stroke-linejoin: miter;
stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt;
stroke-opacity: 1;" />
- <rect
- inkscape:r_cy="true"
- inkscape:r_cx="true"
- style="opacity: 0.5; fill: url("#linearGradient2312")
rgb(0, 0, 0); fill-opacity: 1; fill-rule: evenodd; stroke: none;
stroke-width: 1; stroke-linecap: round; stroke-linejoin: miter;
stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt;
stroke-opacity: 1;"
- id="rect2253"
- width="32"
- height="0.97227097"
- x="8"
- y="29"
- rx="0"
- ry="0" />
- <rect
- inkscape:r_cy="true"
- inkscape:r_cx="true"
- ry="0"
- rx="0"
- y="31"
- x="8"
- height="0.97227097"
- width="32"
- id="rect2257"
- style="opacity: 0.5; fill: url("#linearGradient2314")
rgb(0, 0, 0); fill-opacity: 1; fill-rule: evenodd; stroke: none;
stroke-width: 1; stroke-linecap: round; stroke-linejoin: miter;
stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt;
stroke-opacity: 1;" />
- <rect
- inkscape:r_cy="true"
- inkscape:r_cx="true"
- style="opacity: 0.5; fill: url("#linearGradient2316")
rgb(0, 0, 0); fill-opacity: 1; fill-rule: evenodd; stroke: none;
stroke-width: 1; stroke-linecap: round; stroke-linejoin: miter;
stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt;
stroke-opacity: 1;"
- id="rect2261"
- width="32"
- height="0.97227097"
- x="8"
- y="33"
- rx="0"
- ry="0" />
- <rect
- inkscape:r_cy="true"
- inkscape:r_cx="true"
- ry="0"
- rx="0"
- y="35"
- x="8"
- height="0.97227097"
- width="32"
- id="rect2265"
- style="opacity: 0.5; fill: url("#linearGradient2318")
rgb(0, 0, 0); fill-opacity: 1; fill-rule: evenodd; stroke: none;
stroke-width: 1; stroke-linecap: round; stroke-linejoin: miter;
stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt;
stroke-opacity: 1;" />
- <rect
- inkscape:r_cy="true"
- inkscape:r_cx="true"
- style="opacity: 0.5; fill: url("#linearGradient2320")
rgb(0, 0, 0); fill-opacity: 1; fill-rule: evenodd; stroke: none;
stroke-width: 1; stroke-linecap: round; stroke-linejoin: miter;
stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt;
stroke-opacity: 1;"
- id="rect2269"
- width="32"
- height="0.97227097"
- x="8"
- y="37"
- rx="0"
- ry="0" />
- <rect
- inkscape:r_cy="true"
- inkscape:r_cx="true"
- ry="0"
- rx="0"
- y="39"
- x="8"
- height="0.97227097"
- width="32"
- id="rect2273"
- style="opacity: 0.5; fill: url("#linearGradient2322")
rgb(0, 0, 0); fill-opacity: 1; fill-rule: evenodd; stroke: none;
stroke-width: 1; stroke-linecap: round; stroke-linejoin: miter;
stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt;
stroke-opacity: 1;" />
- <rect
- inkscape:r_cy="true"
- inkscape:r_cx="true"
- style="opacity: 0.5; fill: url("#linearGradient2324")
rgb(0, 0, 0); fill-opacity: 1; fill-rule: evenodd; stroke: none;
stroke-width: 1; stroke-linecap: round; stroke-linejoin: miter;
stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt;
stroke-opacity: 1;"
- id="rect2277"
- width="32"
- height="0.97227097"
- x="8"
- y="41"
- rx="0"
- ry="0" />
- </g>
- <rect
- style="color: rgb(0, 0, 0); fill:
url("#linearGradient1591") rgb(0, 0, 0); fill-opacity: 1;
fill-rule: evenodd; stroke: none; stroke-width: 2; stroke-linecap: round;
stroke-linejoin: round; marker: none; stroke-miterlimit: 4;
stroke-dasharray: none; stroke-dashoffset: 0pt; stroke-opacity: 1;
visibility: visible; display: inline; overflow: visible;"
- id="rect1460"
- width="34"
- height="4"
- x="7"
- y="18"
- inkscape:r_cx="true"
- inkscape:r_cy="true"
- rx="1.7146454"
- ry="1.6610726" />
- <path
- inkscape:r_cy="true"
- inkscape:r_cx="true"
- style="opacity: 0.406593; fill:
url("#radialGradient1572") rgb(0, 0, 0); fill-opacity: 1;
fill-rule: evenodd; stroke: none; stroke-width: 1; stroke-linecap: round;
stroke-linejoin: round; stroke-miterlimit: 4; stroke-dashoffset: 0pt;
stroke-opacity: 0.601093;"
- d="M 39.022894,21.954401 L 8.9789228,21.954401 C
7.4608208,21.962502 6.9982278,22.594587 6.9826028,24.335226 L
6.9826028,35.180882 C 12.330783,39.937562 24.775283,30.210883
40.982603,35.180882 L 40.982603,24.314186 C 40.969992,22.533917
40.441755,21.968139 39.022894,21.954401 z "
- id="rect8390"
- sodipodi:nodetypes="ccccccc" />
- <g
- id="g1387"
- inkscape:r_cx="true"
- inkscape:r_cy="true"
- transform="translate(-2.08616e-07, -0.987405)">
- <path
- inkscape:r_cy="true"
- inkscape:r_cx="true"
- sodipodi:nodetypes="cczcccczccc"
- id="path2086"
- d="M 10.5,20.234846 L 10.5,13 C 10.5,5.1298666
15.897609,1.3910066 24.020027,1.4892921 C 32.18664,1.5875777 37.5,5.0372782
37.5,13 L 37.5,20.234846 C 37.416053,21.938431 32.536612,21.932149
32.5,20.234846 L 32.5,15 C 32.5,13 33.138264,6.528147 24.077241,6.528147 C
14.953718,6.528147 15.489989,13.039885 15.52268,14.992026 L
15.52268,20.268524 C 15.3125,21.859846 10.5,21.797346 10.5,20.234846 z "
- style="fill: url("#linearGradient1392") rgb(0, 0, 0);
fill-opacity: 1; fill-rule: evenodd; stroke:
url("#linearGradient1394") rgb(0, 0, 0); stroke-width: 1;
stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4;
stroke-dasharray: none; stroke-opacity: 1;" />
- <path
- inkscape:r_cy="true"
- inkscape:r_cx="true"
- sodipodi:nodetypes="ccsccc"
- id="rect11343"
- d="M 11.496849,13.160018 C 11.745273,8.7621798 12.91305,4.7080565
18.456117,3.1987817 C 20.036661,5.0232133 13.557817,5.1195438
13.458448,11.481749 C 13.458448,11.481749 13.480108,19.46426
13.480108,19.46426 C 13.245273,20.052648 11.559349,20.070825
11.496849,19.414575 L 11.496849,13.160018 z "
- style="fill: url("#radialGradient7619") rgb(0, 0, 0);
fill-opacity: 1; fill-rule: evenodd; stroke: none; stroke-width: 1;
stroke-linecap: round; stroke-linejoin: round; stroke-miterlimit: 4;
stroke-dashoffset: 0pt; stroke-opacity: 1;" />
- <path
- style="fill: url("#radialGradient7611") rgb(0, 0, 0);
fill-opacity: 1; fill-rule: evenodd; stroke: none; stroke-width: 1;
stroke-linecap: round; stroke-linejoin: round; stroke-miterlimit: 4;
stroke-dashoffset: 0pt; stroke-opacity: 1;"
- d="M 33.500368,9.7120694 L 35.500368,9.7120694 L
35.500368,19.347482 C 35.437868,20.472482 33.469118,19.878732
33.500368,19.347482 L 33.500368,9.7120694 z "
- id="rect1345"
- sodipodi:nodetypes="ccccc"
- inkscape:r_cx="true"
- inkscape:r_cy="true" />
- </g>
- <rect
- style="color: rgb(0, 0, 0); fill: none; fill-opacity: 1; fill-rule:
evenodd; stroke: url("#linearGradient1387") rgb(0, 0, 0);
stroke-width: 1; stroke-linecap: round; stroke-linejoin: round; marker:
none; stroke-miterlimit: 4; stroke-dasharray: none; stroke-dashoffset: 0pt;
stroke-opacity: 1; visibility: visible; display: inline; overflow: visible;"
- id="rect1593"
- width="33"
- height="2.8557696"
- x="7.5"
- y="18.634619"
- inkscape:r_cx="true"
- inkscape:r_cy="true"
- rx="1.2001942"
- ry="1.0968477" />
- </g>
-</svg>
=======================================
--- /shacrypt-gui.rc Sun Feb 21 11:21:39 2010
+++ /dev/null
@@ -1,21 +0,0 @@
-1 ICON "padlock.ico"
-1 VERSIONINFO
-FILEVERSION 1,2,1,0
-PRODUCTVERSION 1,2,1,0
-FILEOS 0x00040004L
-FILETYPE 0x00000001L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "04090000"
- BEGIN
- VALUE "FileVersion", "1.2.1\0"
- VALUE "CompanyName", "LlamaSlayers\0"
- VALUE "InternalName", "shacrypt\0"
- VALUE "LegalCopyright", "Copyright 2009 LlamaSlayers\0"
- VALUE "FileDescription", "SHA1 enCRYPTion program\0"
- VALUE "ProductName", "SHACrypt\0"
- VALUE "ProductVersion", "1.2.1\0"
- END
- END
-END
=======================================
--- /shacrypt-icon.h Sun Nov 15 14:25:05 2009
+++ /dev/null
@@ -1,5411 +0,0 @@
-/* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */
-
-/**
- * This file was generated from a rasterized version of padlock.svg
- * with the gdk-pixbuf-csource command line application that ships
- * with GTK+.
- */
-
-static const GdkPixdata shacrypt_icon = {
- 0x47646b50, /* Pixbuf magic: 'GdkP' */
- 24 + 119146, /* header length + pixel_data length */
- 0x2010002, /* pixdata_type */
- 1024, /* rowstride */
- 256, /* width */
- 256, /* height */
- /* pixel_data: */
- "\357\377\377\377\0\40\226\230\224\26\225\227\223:\224\226\222P\223\225"
- "\221e\222\224\220z\220\222\216\217\217\221\215\244\216\220\214\271\215"
- "\217\213\316\214\216\212\331\212\214\210\336\211\213\207\343\210\212"
- "\206\351\207\211\205\356\206\210\204\363\204\206\202\370\203\205\201"
- "\375\202\204\200\365\201\203\177\343\200\202~\322~\200|\301}\177{\260"
- "|~z\237{}y\216z|x}xzvlwyu[vxtJuws:tvr)rtp\30qso\7\377\377\377\377\0\332"
- "\377\377\377\0.\235\237\233\4\234\236\232,\233\235\231S\232\234\230z"
- "\231\233\227\241\227\231\225\310\226\230\224\357\225\227\223\377\224"
- "\226\222\377\223\225\221\377\221\223\217\377\220\222\216\377\217\221"
- "\215\377\216\220\214\377\215\217\213\377\213\215\211\377\212\214\210"
- "\377\211\213\207\377\210\212\206\377\207\211\205\377\205\207\203\377"
- "\204\206\202\377\203\205\201\377\202\204\200\377\201\203\177\377\177"
- "\201}\377~\200|\377}\177{\377|~z\377{}y\377y{w\377xzv\377wyu\377vxt\377"
- "uws\377suq\377rtp\377qso\377prn\377oqm\366oqm\330oqm\257oqm\206oqm]o"
- "qm4oqm\14\377\377\377\377\0\317\377\377\377\0*\235\237\233\14\235\237"
- "\233D\235\237\233\200\235\237\233\274\234\236\232\364\233\235\231\377"
- "\232\234\230\377\230\232\226\377\227\231\225\377\226\230\224\377\225"
- "\227\223\377\224\226\222\377\222\224\220\377\221\223\217\377\220\222"
- "\216\377\217\221\215\377\216\220\214\377\214\216\212\377\213\215\211"
- "\377\212\214\210\377\211\213\207\377\210\212\206\377\206\210\204\377"
- "\205\207\203\377\204\206\202\377\203\205\201\377\202\204\200\377\200"
- "\202~\377\177\201}\377~\200|\377}\177{\377|~z\377z|x\377y{w\377xzv\377"
- "wyu\377vxt\377tvr\377suq\377rtp\377qso\377prn\377\210oqm\377\5oqm\342"
- "oqm\262oqmtoqm7oqm\5\377\377\377\377\0\306\377\377\377\0\5\235\237\233"
- "\7\235\237\233L\235\237\233\217\235\237\233\314\235\237\233\374\202\235"
- "\237\233\377%\234\236\232\377\233\235\231\377\231\233\227\377\230\232"
- "\226\377\227\231\225\377\226\230\224\377\225\227\223\377\223\225\221"
- "\377\222\224\220\377\221\223\217\377\220\222\216\377\217\221\215\377"
- "\215\217\213\377\214\216\212\377\213\215\211\377\212\214\210\377\211"
- "\213\207\377\207\211\205\377\206\210\204\377\205\207\203\377\204\206"
- "\202\377\203\205\201\377\201\203\177\377\200\202~\377\177\201}\377~\200"
- "|\377}\177{\377{}y\377z|x\377y{w\377xzv\377wyu\377uws\377tvr\377suq\377"
- "rtp\377qso\377\216oqm\377\5oqm\365oqm\275oqm\200oqmCoqm\14\377\377\377"
- "\377\0\277\377\377\377\0\4\235\237\233\13\235\237\233T\235\237\233\246"
- "\235\237\233\361\205\235\237\233\377%\234\236\232\377\232\234\230\377"
- "\231\233\227\377\230\232\226\377\227\231\225\377\226\230\224\377\224"
- "\226\222\377\223\225\221\377\222\224\220\377\221\223\217\377\220\222"
- "\216\377\216\220\214\377\215\217\213\377\214\216\212\377\213\215\211"
- "\377\212\214\210\377\210\212\206\377\207\211\205\377\206\210\204\377"
- "\205\207\203\377\204\206\202\377\202\204\200\377\201\203\177\377\200"
- "\202~\377\177\201}\377~\200|\377|~z\377{}y\377z|x\377y{w\377xzv\377v"
- "xt\377uws\377tvr\377suq\377rtp\377prn\377\223oqm\377\4oqm\372oqm\266"
- "oqmboqm\22\377\377\377\377\0\271\377\377\377\0\4\235\237\233\10\235\237"
- "\233[\235\237\233\257\235\237\233\366\206\235\237\233\377&\234\236\232"
- "\377\233\235\231\377\232\234\230\377\231\233\227\377\230\232\226\377"
- "\227\231\225\377\225\227\223\377\224\226\222\377\223\225\221\377\222"
- "\224\220\377\220\222\216\377\217\221\215\377\216\220\214\377\215\217"
- "\213\377\217\221\215\377\226\230\224\377\234\236\232\377\243\245\241"
- "\377\253\255\251\377\263\265\261\377\266\270\264\377\267\271\266\377"
- "\271\273\267\377\273\275\271\377\275\277\273\377\277\301\275\377\300"
- "\302\277\377\302\305\301\377\300\302\277\377\271\273\270\377\261\263"
- "\260\377\251\253\247\377\240\242\236\377\230\232\226\377\217\221\215"
- "\377\207\211\205\377}\177{\377tvr\377\227oqm\377\4oqm\373oqm\272oqmf"
- "oqm\25\377\377\377\377\0\264\377\377\377\0\3\235\237\233\32\235\237\233"
- "\204\235\237\233\352\210\235\237\233\377\23\234\236\232\377\233\235\231"
- "\377\232\234\230\377\231\233\227\377\227\231\225\377\226\230\224\377"
- "\225\227\223\377\224\226\222\377\231\233\227\377\243\245\241\377\257"
- "\261\255\377\273\276\271\377\307\312\306\377\325\327\323\377\337\342"
- "\335\377\343\346\342\377\344\347\342\377\344\347\343\377\345\347\343"
- "\377\202\345\350\344\377\7\346\350\345\377\346\351\345\377\347\351\345"
- "\377\347\351\346\377\350\352\346\377\350\352\347\377\350\353\347\377"
- "\204\351\353\350\377\20\350\353\347\377\350\352\347\377\347\352\346\377"
- "\347\351\346\377\347\351\345\377\346\350\345\377\346\350\344\377\342"
- "\345\341\377\332\334\330\377\322\324\320\377\312\314\310\377\301\304"
- "\300\377\267\271\265\377\244\247\242\377\221\224\217\377~\200|\377\221"
- "oqm\377\3oqm\374oqm\257oqmA\377\377\377\377\0\260\377\377\377\0\3\235"
- "\237\2339\235\237\233\247\235\237\233\372\211\235\237\233\377\13\234"
- "\236\232\377\233\235\231\377\232\234\230\377\230\232\226\377\233\235"
- "\231\377\252\255\250\377\273\276\271\377\315\317\313\377\333\336\331"
- "\377\341\344\337\377\341\344\340\377\202\342\345\340\377\6\343\345\341"
- "\377\343\346\341\377\343\346\342\377\344\347\342\377\344\347\343\377"
- "\345\347\343\377\202\345\350\344\377\5\346\350\345\377\346\351\345\377"
- "\347\351\345\377\347\351\346\377\347\352\346\377\202\350\352\347\377"
- "\204\351\353\350\377\27\350\353\347\377\350\352\347\377\350\352\346\377"
- "\347\351\346\377\347\351\345\377\346\351\345\377\346\350\344\377\345"
- "\350\344\377\345\347\343\377\344\347\343\377\344\346\342\377\343\346"
- "\342\377\343\346\341\377\342\345\341\377\342\345\340\377\341\344\340"
- "\377\341\344\337\377\334\337\332\377\311\314\307\377\267\271\264\377"
- "\242\245\240\377\210\213\206\377rtp\377\216oqm\377\3oqm\324oqmgoqm\13"
- "\377\377\377\377\0\253\377\377\377\0\2\235\237\233I\235\237\233\312\213"
- "\235\237\233\377\6\234\236\232\377\237\241\235\377\260\262\256\377\300"
- "\303\276\377\321\324\317\377\336\342\334\377\202\340\343\336\377\3\340"
- "\344\337\377\341\344\337\377\341\344\340\377\202\342\345\340\377\6\343"
- "\345\341\377\343\346\341\377\343\346\342\377\344\346\342\377\344\347"
- "\343\377\345\347\343\377\202\345\350\344\377\5\346\350\344\377\346\351"
- "\345\377\347\351\345\377\347\351\346\377\347\352\346\377\202\350\352"
- "\347\377\202\351\353\350\377\22\352\354\351\377\351\353\350\377\351\353"
- "\347\377\350\352\347\377\350\352\346\377\347\351\346\377\347\351\345"
- "\377\346\351\345\377\346\350\344\377\345\350\344\377\345\347\343\377"
- "\344\347\343\377\344\346\342\377\343\346\342\377\343\346\341\377\342"
- "\345\341\377\342\345\340\377\341\344\340\377\202\341\344\337\377\202"
- "\340\343\336\377\10\337\342\335\377\337\342\334\377\336\341\334\377\332"
- "\335\327\377\301\305\277\377\247\252\245\377\214\217\212\377tvr\377\214"
- "oqm\377\3oqm\357oqm\215oqm\33\377\377\377\377\0\247\377\377\377\0\2\235"
- "\237\233-\235\237\233\271\213\235\237\233\377\7\242\244\240\377\265\270"
- "\263\377\312\315\310\377\334\337\332\377\336\342\334\377\337\342\335"
- "\377\337\343\335\377\202\340\343\336\377\1\340\344\337\377\202\341\344"
- "\337\377\202\342\345\340\377\5\342\345\341\377\343\346\341\377\343\346"
- "\342\377\344\346\342\377\344\347\343\377\202\345\347\343\377\6\345\350"
- "\344\377\346\350\344\377\346\351\345\377\347\351\345\377\347\351\346"
- "\377\347\352\346\377\202\350\352\347\377\205\351\353\350\377\17\350\352"
- "\347\377\350\352\346\377\347\351\346\377\347\351\345\377\346\351\345"
- "\377\346\350\344\377\345\350\344\377\345\347\343\377\344\347\343\377"
- "\344\346\342\377\343\346\342\377\343\346\341\377\342\345\341\377\342"
- "\345\340\377\342\344\340\377\202\341\344\337\377\202\340\343\336\377"
- "\14\337\342\335\377\337\342\334\377\336\341\334\377\336\341\333\377\335"
- "\341\333\377\335\340\332\377\334\340\332\377\334\337\331\377\331\335"
- "\327\377\277\302\275\377\234\237\232\377y|w\377\213oqm\377\3oqm\365o"
- "qm\203oqm\15\377\377\377\377\0\243\377\377\377\0\3\235\237\233\30\235"
- "\237\233\233\235\237\233\375\211\235\237\233\377\7\240\242\236\377\267"
- "\272\265\377\315\317\313\377\334\340\332\377\336\341\333\377\336\341"
- "\334\377\336\342\334\377\202\337\342\335\377\203\340\343\336\377\202"
- "\341\344\337\377\202\342\345\340\377\4\342\345\341\377\343\346\341\377"
- "\343\346\342\377\344\346\342\377\202\344\347\343\377\7\345\347\343\377"
- "\345\350\344\377\346\350\344\377\346\351\345\377\347\351\345\377\347"
- "\351\346\377\347\352\346\377\202\350\352\347\377\1\351\353\347\377\204"
- "\351\353\350\377\202\350\352\347\377\15\347\352\346\377\347\351\345\377"
- "\346\351\345\377\346\350\344\377\345\350\344\377\345\347\343\377\344"
- "\347\343\377\344\347\342\377\344\346\342\377\343\346\341\377\343\345"
- "\341\377\342\345\340\377\342\344\340\377\202\341\344\337\377\202\340"
- "\343\336\377\202\337\342\335\377\16\336\342\334\377\336\341\334\377\335"
- "\341\333\377\335\340\332\377\334\340\332\377\334\337\331\377\333\337"
- "\331\377\333\337\330\377\332\336\330\377\332\336\327\377\332\335\327"
- "\377\300\304\276\377\236\240\234\377|~z\377\212oqm\377\3oqm\351oqmio"
- "qm\4\377\377\377\377\0\237\377\377\377\0\3\235\237\233\3\235\237\233"
- "w\235\237\233\363\211\235\237\233\377\4\246\250\244\377\300\303\276\377"
- "\331\334\327\377\335\340\332\377\202\335\341\333\377\4\336\341\334\377"
- "\336\342\334\377\341\344\337\377\337\342\335\377\203\340\343\336\377"
- "\202\341\344\337\377\202\342\345\340\377\15\342\345\341\377\343\346\341"
- "\377\343\346\342\377\344\346\342\377\344\347\342\377\344\347\343\377"
- "\345\347\343\377\345\350\344\377\346\350\344\377\346\350\345\377\346"
- "\351\345\377\347\351\346\377\347\352\346\377\202\350\352\347\377\1\350"
- "\353\347\377\204\351\353\350\377\202\350\352\347\377\5\347\352\346\377"
- "\347\351\346\377\346\351\345\377\346\350\344\377\345\350\344\377\202"
- "\345\347\343\377\6\344\347\342\377\344\346\342\377\343\346\341\377\343"
- "\345\341\377\342\345\340\377\342\344\340\377\202\341\344\337\377\202"
- "\340\343\336\377\202\337\342\335\377\15\336\342\334\377\336\341\334\377"
- "\335\341\333\377\335\340\333\377\334\340\332\377\334\337\332\377\333"
- "\337\331\377\333\337\330\377\333\336\330\377\332\336\327\377\332\335"
- "\327\377\331\335\326\377\331\334\326\377\202\330\334\325\377\3\277\302"
- "\274\377\222\225\220\377qso\377\211oqm\377\2oqm\327oqmN\377\377\377\377"
- "\0\235\377\377\377\0\2\235\237\233\36\235\237\233\302\211\235\237\233"
- "\377\5\256\261\254\377\311\314\307\377\334\337\331\377\334\340\332\377"
- "\335\340\332\377\202\335\341\333\377\5\342\345\340\377\354\357\353\377"
- "\366\367\366\377\366\367\365\377\340\344\337\377\202\340\343\336\377"
- "\202\341\344\337\377\17\341\344\340\377\342\345\340\377\342\345\341\377"
- "\343\346\341\377\343\346\342\377\344\346\342\377\344\347\342\377\344"
- "\347\343\377\345\347\343\377\345\350\344\377\346\350\344\377\346\350"
- "\345\377\346\351\345\377\347\351\346\377\347\352\346\377\202\350\352"
- "\347\377\1\350\353\347\377\204\351\353\350\377\202\350\352\347\377\4"
- "\347\352\346\377\347\351\346\377\346\351\345\377\346\350\345\377\202"
- "\345\350\344\377\5\345\347\343\377\344\347\342\377\344\346\342\377\343"
- "\346\341\377\343\345\341\377\202\342\345\340\377\202\341\344\337\377"
- "\202\340\343\336\377\202\337\342\335\377\4\336\342\334\377\336\341\334"
- "\377\335\341\333\377\335\340\333\377\202\334\340\332\377\5\334\337\331"
- "\377\333\337\330\377\333\336\330\377\332\336\327\377\332\335\327\377"
- "\202\331\335\326\377\202\330\334\325\377\202\327\333\324\377\4\326\332"
- "\323\377\313\316\310\377\237\243\235\377wyu\377\211oqm\377\2oqm\250o"
- "qm\20\377\377\377\377\0\232\377\377\377\0\2\235\237\233V\235\237\233"
- "\357\210\235\237\233\377\12\257\262\255\377\321\324\317\377\333\337\331"
- "\377\334\337\331\377\334\340\332\377\335\340\332\377\337\343\335\377"
- "\351\354\350\377\364\365\364\377\372\373\372\377\202\372\372\372\377"
- "\3\372\372\371\377\354\355\352\377\340\343\336\377\202\341\344\337\377"
- "\4\341\344\340\377\342\345\340\377\342\345\341\377\343\346\341\377\202"
- "\343\346\342\377\7\344\347\342\377\344\347\343\377\345\347\343\377\345"
- "\350\344\377\346\350\344\377\346\350\345\377\346\351\345\377\202\347"
- "\351\346\377\3\350\352\346\377\350\352\347\377\350\353\347\377\204\351"
- "\353\350\377\202\350\352\347\377\13\347\352\346\377\347\351\346\377\346"
- "\351\345\377\346\350\345\377\346\350\344\377\345\350\344\377\345\347"
- "\343\377\344\347\343\377\344\346\342\377\343\346\341\377\343\345\341"
- "\377\202\342\345\340\377\202\341\344\337\377\202\340\343\336\377\202"
- "\337\342\335\377\13\336\342\334\377\336\341\334\377\336\341\333\377\335"
- "\340\333\377\335\340\332\377\334\340\332\377\334\337\331\377\333\337"
- "\331\377\333\336\330\377\332\336\330\377\332\335\327\377\202\331\335"
- "\326\377\202\330\334\325\377\202\327\333\324\377\202\326\332\323\377"
- "\5\325\332\322\377\325\331\322\377\322\326\316\377\254\260\252\377|~"
- "y\377\210oqm\377\2oqm\342oqmA\377\377\377\377\0\227\377\377\377\0\2\235"
- "\237\233\13\235\237\233\236\210\235\237\233\377\12\250\253\246\377\312"
- "\315\310\377\333\337\330\377\333\337\331\377\334\337\331\377\335\341"
- "\333\377\346\351\345\377\362\363\361\377\372\373\372\377\373\373\372"
- "\377\203\372\373\372\377\3\372\372\372\377\372\372\371\377\361\362\360"
- "\377\202\341\344\337\377\3\341\344\340\377\342\345\340\377\342\345\341"
- "\377\202\343\346\341\377\4\343\346\342\377\344\347\342\377\344\347\343"
- "\377\345\347\343\377\202\345\350\344\377\7\346\350\345\377\346\351\345"
- "\377\347\351\345\377\347\351\346\377\350\352\346\377\350\352\347\377"
- "\350\353\347\377\204\351\353\350\377\15\350\353\347\377\350\352\347\377"
- "\347\352\346\377\347\351\346\377\347\351\345\377\346\350\345\377\346"
- "\350\344\377\345\350\344\377\345\347\343\377\344\347\343\377\344\346"
- "\342\377\343\346\342\377\343\346\341\377\202\342\345\340\377\202\341"
- "\344\337\377\202\340\343\336\377\21\337\343\335\377\337\342\335\377\337"
- "\342\334\377\336\341\334\377\336\341\333\377\335\340\333\377\335\340"
- "\332\377\334\340\332\377\334\337\331\377\333\337\331\377\333\336\330"
- "\377\332\336\330\377\332\335\327\377\331\335\327\377\331\335\326\377"
- "\330\334\326\377\330\334\325\377\202\327\333\324\377\12\326\333\323\377"
- "\326\332\323\377\326\332\322\377\325\331\322\377\325\331\321\377\324"
- "\330\321\377\324\330\320\377\320\325\315\377\246\251\243\377vxt\377\207"
- "oqm\377\3oqm\376oqm\213oqm\6\377\377\377\377\0\224\377\377\377\0\2\235"
- "\237\233#\235\237\233\332\207\235\237\233\377\10\243\245\241\377\303"
- "\306\301\377\332\336\330\377\333\337\330\377\333\337\331\377\337\342"
- "\334\377\356\360\356\377\371\372\371\377\202\373\374\373\377\2\373\373"
- "\373\377\373\373\372\377\203\372\373\372\377\5\372\372\372\377\372\372"
- "\371\377\357\360\356\377\341\344\337\377\341\344\340\377\202\342\345"
- "\340\377\6\343\345\341\377\343\346\341\377\343\346\342\377\344\347\342"
- "\377\344\347\343\377\345\347\343\377\202\345\350\344\377\5\346\350\345"
- "\377\346\351\345\377\347\351\345\377\347\351\346\377\347\352\346\377"
- "\202\350\352\347\377\204\351\353\350\377\21\350\353\347\377\350\352\347"
- "\377\350\352\346\377\347\351\346\377\347\351\345\377\346\350\345\377"
- "\346\350\344\377\345\350\344\377\345\347\343\377\344\347\343\377\344"
- "\346\342\377\343\346\342\377\343\346\341\377\342\345\341\377\342\345"
- "\340\377\341\344\340\377\341\344\337\377\202\340\343\336\377\21\340\343"
- "\335\377\337\342\335\377\337\342\334\377\336\341\334\377\336\341\333"
- "\377\335\340\333\377\335\340\332\377\334\340\332\377\334\337\331\377"
- "\333\337\331\377\333\336\330\377\332\336\330\377\332\336\327\377\331"
- "\335\327\377\331\335\326\377\330\334\326\377\330\334\325\377\202\327"
- "\333\324\377\15\326\333\323\377\326\332\323\377\326\332\322\377\325\331"
- "\322\377\325\331\321\377\324\330\321\377\324\330\320\377\323\330\320"
- "\377\323\327\317\377\322\327\317\377\314\320\310\377\234\237\231\377"
- "rtp\377\207oqm\377\2oqm\320oqm!\377\377\377\377\0\222\377\377\377\0\2"
- "\235\237\2333\235\237\233\351\207\235\237\233\377\11\264\267\262\377"
- "\327\333\325\377\332\336\330\377\333\337\330\377\334\337\332\377\352"
- "\354\350\377\372\373\372\377\374\374\374\377\374\374\373\377\202\373"
- "\374\373\377\1\373\373\373\377\202\373\373\372\377\202\372\373\372\377"
- "\4\372\372\372\377\371\372\371\377\345\350\343\377\341\344\340\377\202"
- "\342\345\340\377\6\343\345\341\377\343\346\341\377\343\346\342\377\344"
- "\347\342\377\344\347\343\377\345\347\343\377\202\345\350\344\377\5\346"
- "\350\344\377\346\351\345\377\347\351\345\377\347\351\346\377\347\352"
- "\346\377\202\350\352\347\377\202\351\353\350\377\22\352\354\351\377\351"
- "\353\350\377\351\353\347\377\350\352\347\377\350\352\346\377\347\351"
- "\346\377\347\351\345\377\346\351\345\377\346\350\344\377\345\350\344"
- "\377\345\347\343\377\344\347\343\377\344\346\342\377\343\346\342\377"
- "\343\346\341\377\342\345\341\377\342\345\340\377\341\344\340\377\202"
- "\341\344\337\377\23\340\343\336\377\340\343\335\377\337\342\335\377\337"
- "\342\334\377\336\341\334\377\336\341\333\377\335\341\333\377\335\340"
- "\332\377\334\340\332\377\334\337\331\377\333\337\331\377\333\336\330"
- "\377\332\336\330\377\332\336\327\377\331\335\327\377\331\335\326\377"
- "\330\334\326\377\330\334\325\377\330\333\325\377\202\327\333\324\377"
- "\16\326\332\323\377\326\332\322\377\325\331\322\377\325\331\321\377\324"
- "\330\321\377\324\330\320\377\323\330\320\377\323\327\317\377\322\327"
- "\317\377\322\326\316\377\321\326\316\377\321\326\315\377\304\311\301"
- "\377\213\216\210\377\207oqm\377\2oqm\347oqm0\377\377\377\377\0\220\377"
- "\377\377\0\2\235\237\233D\235\237\233\363\206\235\237\233\377\10\241"
- "\243\237\377\305\310\303\377\332\336\327\377\332\336\330\377\333\337"
- "\330\377\344\347\342\377\367\370\367\377\374\375\374\377\202\374\374"
- "\374\377\202\374\374\373\377\1\373\374\373\377\202\373\373\373\377\202"
- "\373\373\372\377\202\372\373\372\377\2\352\354\351\377\341\344\340\377"
- "\202\342\345\340\377\5\342\345\341\377\343\346\341\377\343\346\342\377"
- "\344\346\342\377\344\347\343\377\202\345\347\343\377\6\345\350\344\377"
- "\346\350\344\377\346\351\345\377\347\351\345\377\347\351\346\377\347"
- "\352\346\377\202\350\352\347\377\205\351\353\350\377\17\350\352\347\377"
- "\350\352\346\377\347\351\346\377\347\351\345\377\346\351\345\377\346"
- "\350\344\377\345\350\344\377\345\347\343\377\344\347\343\377\344\346"
- "\342\377\343\346\342\377\343\346\341\377\342\345\341\377\342\345\340"
- "\377\341\344\340\377\202\341\344\337\377\202\340\343\336\377\17\337\342"
- "\335\377\337\342\334\377\336\341\334\377\336\341\333\377\335\341\333"
- "\377\335\340\332\377\334\340\332\377\334\337\331\377\333\337\331\377"
- "\333\336\330\377\332\336\330\377\332\336\327\377\331\335\327\377\331"
- "\335\326\377\331\334\326\377\202\330\334\325\377\202\327\333\324\377"
- "\202\326\332\323\377\202\325\331\322\377\15\324\331\321\377\324\330\320"
- "\377\323\330\320\377\323\327\317\377\322\327\317\377\322\326\316\377"
- "\321\326\316\377\321\326\315\377\320\325\315\377\320\325\314\377\320"
- "\324\314\377\246\252\243\377rtp\377\206oqm\377\2oqm\361oqmB\377\377\377"
- "\377\0\216\377\377\377\0\2\235\237\233Y\235\237\233\372\206\235\237\233"
- "\377\6\252\255\250\377\321\325\317\377\332\336\327\377\332\336\330\377"
- "\337\343\334\377\362\364\361\377\202\375\375\375\377\3\375\375\374\377"
- "\374\375\374\377\374\374\374\377\202\374\374\373\377\1\373\374\373\377"
- "\202\373\373\373\377\202\373\373\372\377\3\371\372\371\377\351\354\350"
- "\377\341\344\337\377\202\342\345\340\377\4\342\345\341\377\343\346\341"
- "\377\343\346\342\377\344\346\342\377\202\344\347\343\377\7\345\347\343"
- "\377\345\350\344\377\346\350\344\377\346\351\345\377\347\351\345\377"
- "\347\351\346\377\347\352\346\377\202\350\352\347\377\1\351\353\347\377"
- "\204\351\353\350\377\17\350\352\347\377\350\352\346\377\347\352\346\377"
- "\347\351\345\377\346\351\345\377\346\350\344\377\345\350\344\377\345"
- "\347\343\377\344\347\343\377\344\347\342\377\343\346\342\377\343\346"
- "\341\377\342\345\341\377\342\345\340\377\342\344\340\377\202\341\344"
- "\337\377\202\340\343\336\377\202\337\342\335\377\202\336\341\334\377"
- "\13\335\341\333\377\335\340\332\377\334\340\332\377\334\337\331\377\333"
- "\337\331\377\333\337\330\377\332\336\330\377\332\336\327\377\332\335"
- "\327\377\331\335\326\377\331\334\326\377\202\330\334\325\377\202\327"
- "\333\324\377\202\326\332\323\377\202\325\331\322\377\5\324\331\321\377"
- "\324\330\321\377\323\330\320\377\323\327\317\377\322\327\317\377\202"
- "\322\326\316\377\4\321\326\315\377\321\325\315\377\320\325\314\377\320"
- "\324\314\377\202\317\324\313\377\2\276\302\272\377\200\203~\377\206o"
- "qm\377\2oqm\371oqmV\377\377\377\377\0\214\377\377\377\0\2\235\237\233"
- "l\235\237\233\376\206\235\237\233\377\6\271\274\267\377\330\334\326\377"
- "\332\336\327\377\333\337\331\377\354\356\353\377\374\375\374\377\203"
- "\375\375\375\377\202\374\375\374\377\202\374\374\374\377\2\374\374\373"
- "\377\373\374\373\377\202\373\373\373\377\4\373\373\372\377\366\366\365"
- "\377\345\347\343\377\341\344\337\377\202\342\345\340\377\4\342\345\341"
- "\377\343\346\341\377\343\346\342\377\344\346\342\377\202\344\347\343"
- "\377\7\345\347\343\377\345\350\344\377\346\350\344\377\346\350\345\377"
- "\346\351\345\377\347\351\346\377\347\352\346\377\202\350\352\347\377"
- "\1\351\353\347\377\204\351\353\350\377\202\350\352\347\377\15\347\352"
- "\346\377\347\351\346\377\346\351\345\377\346\350\344\377\345\350\344"
- "\377\345\347\343\377\344\347\343\377\344\347\342\377\344\346\342\377"
- "\343\346\341\377\343\345\341\377\342\345\340\377\342\344\340\377\202"
- "\341\344\337\377\202\340\343\336\377\202\337\342\335\377\15\336\342\334"
- "\377\336\341\334\377\335\341\333\377\335\340\333\377\334\340\332\377"
- "\334\337\332\377\333\337\331\377\333\337\330\377\333\336\330\377\332"
- "\336\327\377\332\335\327\377\331\335\326\377\331\334\326\377\202\330"
- "\334\325\377\202\327\333\324\377\202\326\332\323\377\15\325\332\322\377"
- "\325\331\322\377\324\331\321\377\324\330\321\377\323\330\320\377\323"
- "\327\320\377\323\327\317\377\322\327\316\377\322\326\316\377\321\326"
- "\315\377\321\325\315\377\320\325\314\377\320\324\314\377\202\317\324"
- "\313\377\202\316\323\312\377\2\312\317\306\377\227\232\224\377\206oq"
- "m\377\2oqm\375oqmn\377\377\377\377\0\212\377\377\377\0\2\235\237\233"
- "W\235\237\233\376\205\235\237\233\377\10\236\240\234\377\302\305\277"
- "\377\331\335\327\377\332\336\327\377\337\342\335\377\371\371\370\377"
- "\376\376\376\377\375\376\375\377\203\375\375\375\377\202\374\375\374"
- "\377\202\374\374\374\377\1\374\374\373\377\202\373\374\373\377\4\373"
- "\373\373\377\360\361\357\377\342\345\340\377\341\344\337\377\202\342"
- "\345\340\377\15\342\345\341\377\343\346\341\377\343\346\342\377\344\346"
- "\342\377\344\347\342\377\344\347\343\377\345\347\343\377\345\350\344"
- "\377\346\350\344\377\346\350\345\377\346\351\345\377\347\351\346\377"
- "\347\352\346\377\202\350\352\347\377\1\350\353\347\377\204\351\353\350"
- "\377\202\350\352\347\377\4\347\352\346\377\347\351\346\377\346\351\345"
- "\377\346\350\345\377\202\345\350\344\377\5\345\347\343\377\344\347\342"
- "\377\344\346\342\377\343\346\341\377\343\345\341\377\202\342\345\340"
- "\377\202\341\344\337\377\202\340\343\336\377\202\337\342\335\377\15\336"
- "\342\334\377\336\341\334\377\335\341\333\377\335\340\333\377\334\340"
- "\332\377\334\337\332\377\334\337\331\377\333\337\330\377\333\336\330"
- "\377\332\336\327\377\332\335\327\377\331\335\326\377\331\334\326\377"
- "\202\330\334\325\377\202\327\333\324\377\202\326\332\323\377\15\325\332"
- "\322\377\325\331\322\377\324\331\321\377\324\330\321\377\324\330\320"
- "\377\323\327\320\377\323\327\317\377\322\327\317\377\322\326\316\377"
- "\321\326\316\377\321\325\315\377\320\325\314\377\320\324\314\377\202"
- "\317\324\313\377\202\316\323\312\377\202\315\322\311\377\2\314\322\310"
- "\377\242\246\237\377\207oqm\377\1oqmc\377\377\377\377\0\210\377\377\377"
- "\0\2\235\237\233:\235\237\233\367\205\235\237\233\377\6\237\241\235\377"
- "\307\312\304\377\331\335\327\377\332\336\327\377\341\344\337\377\373"
- "\373\372\377\202\376\376\376\377\204\375\375\375\377\202\374\375\374"
- "\377\202\374\374\374\377\4\374\374\373\377\373\374\373\377\371\372\371"
- "\377\351\353\347\377\202\341\344\337\377\22\341\344\340\377\342\345\340"
- "\377\342\345\341\377\343\346\341\377\343\346\342\377\344\346\342\377"
- "\344\347\342\377\344\347\343\377\345\347\343\377\345\350\344\377\346"
- "\350\344\377\346\350\345\377\346\351\345\377\347\351\346\377\347\352"
- "\346\377\350\352\346\377\350\352\347\377\350\353\347\377\204\351\353"
- "\350\377\202\350\352\347\377\13\347\352\346\377\347\351\346\377\346\351"
- "\345\377\346\350\345\377\346\350\344\377\345\350\344\377\345\347\343"
- "\377\344\347\342\377\344\346\342\377\343\346\341\377\343\345\341\377"
- "\202\342\345\340\377\202\341\344\337\377\202\340\343\336\377\202\337"
- "\342\335\377\13\336\342\334\377\336\341\334\377\336\341\333\377\335\340"
- "\333\377\335\340\332\377\334\340\332\377\334\337\331\377\333\337\331"
- "\377\333\336\330\377\332\336\330\377\332\335\327\377\202\331\335\326"
- "\377\202\330\334\325\377\202\327\333\324\377\202\326\332\323\377\15\325"
- "\332\322\377\325\331\322\377\324\331\321\377\324\330\321\377\324\330"
- "\320\377\323\330\320\377\323\327\317\377\322\327\317\377\322\326\316"
- "\377\321\326\316\377\321\325\315\377\320\325\315\377\320\325\314\377"
- "\202\317\324\313\377\202\316\323\312\377\202\315\322\311\377\5\314\322"
- "\310\377\314\321\310\377\314\321\307\377\253\256\247\377qso\377\205o"
- "qm\377\2oqm\373oqmE\377\377\377\377\0\206\377\377\377\0\2\235\237\233"
- "#\235\237\233\353\205\235\237\233\377\6\241\243\237\377\313\316\310\377"
- "\331\335\327\377\332\336\327\377\343\346\341\377\374\374\374\377\202"
- "\376\376\376\377\202\375\376\375\377\202\375\375\375\377\2\375\375\374"
- "\377\374\375\374\377\203\374\374\374\377\3\373\374\373\377\364\365\363"
- "\377\343\345\341\377\202\341\344\337\377\3\341\344\340\377\342\345\340"
- "\377\342\345\341\377\202\343\346\341\377\15\343\346\342\377\344\347\342"
- "\377\344\347\343\377\345\347\343\377\345\350\344\377\346\350\344\377"
- "\346\350\345\377\346\351\345\377\347\351\345\377\347\351\346\377\350"
- "\352\346\377\350\352\347\377\350\353\347\377\204\351\353\350\377\15\350"
- "\353\347\377\350\352\347\377\347\352\346\377\347\351\346\377\347\351"
- "\345\377\346\350\345\377\346\350\344\377\345\350\344\377\345\347\343"
- "\377\344\347\343\377\344\346\342\377\343\346\342\377\343\345\341\377"
- "\202\342\345\340\377\202\341\344\337\377\202\340\343\336\377\21\337\343"
- "\335\377\337\342\335\377\337\342\334\377\336\341\334\377\336\341\333"
- "\377\335\340\333\377\335\340\332\377\334\340\332\377\334\337\331\377"
- "\333\337\331\377\333\336\330\377\332\336\330\377\332\335\327\377\331"
- "\335\327\377\331\335\326\377\330\334\326\377\330\334\325\377\202\327"
- "\333\324\377\202\326\332\323\377\17\325\332\322\377\325\331\322\377\325"
- "\331\321\377\324\330\321\377\324\330\320\377\323\330\320\377\323\327"
- "\317\377\322\327\317\377\322\326\316\377\321\326\316\377\321\325\315"
- "\377\320\325\315\377\320\325\314\377\317\324\314\377\317\324\313\377"
- "\202\316\323\312\377\202\315\322\311\377\7\315\322\310\377\314\321\310"
- "\377\314\321\307\377\313\320\307\377\313\320\306\377\261\266\256\377"
- "tvq\377\205oqm\377\2oqm\361oqm-\377\377\377\377\0\204\377\377\377\0\2"
- "\235\237\233\22\235\237\233\331\205\235\237\233\377\6\240\242\236\377"
- "\316\322\313\377\331\335\327\377\332\336\327\377\345\350\344\377\375"
- "\375\374\377\202\376\376\376\377\202\375\376\375\377\203\375\375\375"
- "\377\2\375\375\374\377\374\375\374\377\202\374\374\374\377\3\372\373"
- "\372\377\353\355\352\377\340\343\336\377\202\341\344\337\377\1\341\344"
- "\340\377\202\342\345\340\377\6\343\345\341\377\343\346\341\377\343\346"
- "\342\377\344\347\342\377\344\347\343\377\345\347\343\377\202\345\350"
- "\344\377\7\346\350\345\377\346\351\345\377\347\351\345\377\347\351\346"
- "\377\347\352\346\377\350\352\347\377\350\353\347\377\204\351\353\350"
- "\377\21\350\353\347\377\350\352\347\377\350\352\346\377\347\351\346\377"
- "\347\351\345\377\346\350\345\377\346\350\344\377\345\350\344\377\345"
- "\347\343\377\344\347\343\377\344\346\342\377\343\346\342\377\343\346"
- "\341\377\342\345\341\377\342\345\340\377\341\344\340\377\341\344\337"
- "\377\202\340\343\336\377\21\337\343\335\377\337\342\335\377\337\342\334"
- "\377\336\341\334\377\336\341\333\377\335\340\333\377\335\340\332\377"
- "\334\340\332\377\334\337\331\377\333\337\331\377\333\336\330\377\332"
- "\336\330\377\332\336\327\377\331\335\327\377\331\335\326\377\330\334"
- "\326\377\330\334\325\377\202\327\333\324\377\22\326\333\323\377\326\332"
- "\323\377\326\332\322\377\325\331\322\377\325\331\321\377\324\330\321"
- "\377\324\330\320\377\323\330\320\377\323\327\317\377\322\327\317\377"
- "\322\326\316\377\321\326\316\377\321\326\315\377\320\325\315\377\320"
- "\325\314\377\317\324\314\377\317\324\313\377\316\323\313\377\202\316"
- "\323\312\377\12\315\322\311\377\315\322\310\377\314\321\310\377\314\321"
- "\307\377\313\320\307\377\313\320\306\377\312\320\306\377\312\317\305"
- "\377\267\275\264\377uxs\377\205oqm\377\2oqm\342oqm\32\377\377\377\377"
- "\0\202\377\377\377\0\2\235\237\233\2\235\237\233\276\205\235\237\233"
- "\377\7\236\240\234\377\311\314\306\377\331\335\327\377\332\336\327\377"
- "\347\352\346\377\375\375\375\377\376\376\375\377\203\375\376\375\377"
- "\204\375\375\375\377\202\374\375\374\377\7\374\374\374\377\366\367\365"
- "\377\344\347\342\377\340\343\336\377\340\344\337\377\341\344\337\377"
- "\341\344\340\377\202\342\345\340\377\6\343\345\341\377\343\346\341\377"
- "\343\346\342\377\344\347\342\377\344\347\343\377\345\347\343\377\202"
- "\345\350\344\377\5\346\350\345\377\346\351\345\377\347\351\345\377\347"
- "\351\346\377\347\352\346\377\202\350\352\347\377\202\351\353\350\377"
- "\23\352\354\351\377\351\353\350\377\351\353\347\377\350\352\347\377\350"
- "\352\346\377\347\351\346\377\347\351\345\377\346\351\345\377\346\350"
- "\344\377\345\350\344\377\345\347\343\377\344\347\343\377\344\346\342"
- "\377\343\346\342\377\343\346\341\377\342\345\341\377\342\345\340\377"
- "\341\344\340\377\341\344\337\377\202\340\343\336\377\22\340\343\335\377"
- "\337\342\335\377\337\342\334\377\336\341\334\377\336\341\333\377\335"
- "\341\333\377\335\340\332\377\334\340\332\377\334\337\331\377\333\337"
- "\331\377\333\336\330\377\332\336\330\377\332\336\327\377\331\335\327"
- "\377\331\335\326\377\330\334\326\377\330\334\325\377\330\333\325\377"
- "\202\327\333\324\377\21\326\332\323\377\326\332\322\377\325\331\322\377"
- "\325\331\321\377\324\330\321\377\324\330\320\377\323\330\320\377\323"
- "\327\317\377\322\327\317\377\322\326\316\377\321\326\316\377\321\326"
- "\315\377\320\325\315\377\320\325\314\377\317\324\314\377\317\324\313"
- "\377\317\323\313\377\202\316\323\312\377\202\315\322\311\377\12\314\321"
- "\310\377\314\321\307\377\313\320\307\377\313\320\306\377\312\320\306"
- "\377\312\317\305\377\311\317\305\377\311\316\304\377\263\270\257\377"
- "qto\377\205oqm\377\2oqm\315oqm\6\377\377\377\377\0\2\377\377\377\0\235"
- "\237\233q\206\235\237\233\377\4\301\304\277\377\331\335\327\377\332\336"
- "\327\377\352\354\350\377\210\375\375\375\377\202\375\375\374\377\10\374"
- "\375\374\377\374\374\374\377\361\363\360\377\341\344\337\377\340\343"
- "\336\377\340\344\337\377\341\344\337\377\341\344\340\377\202\342\345"
- "\340\377\6\342\345\341\377\343\346\341\377\343\346\342\377\344\346\342"
- "\377\344\347\343\377\345\347\343\377\202\345\350\344\377\5\346\350\344"
- "\377\346\351\345\377\347\351\345\377\347\351\346\377\347\352\346\377"
- "\202\350\352\347\377\202\351\353\350\377\22\352\354\351\377\351\353\350"
- "\377\351\353\347\377\350\352\347\377\350\352\346\377\347\351\346\377"
- "\347\351\345\377\346\351\345\377\346\350\344\377\345\350\344\377\345"
- "\347\343\377\344\347\343\377\344\346\342\377\343\346\342\377\343\346"
- "\341\377\342\345\341\377\342\345\340\377\341\344\340\377\202\341\344"
- "\337\377\202\340\343\336\377\17\337\342\335\377\337\342\334\377\336\341"
- "\334\377\336\341\333\377\335\341\333\377\335\340\332\377\334\340\332"
- "\377\334\337\331\377\333\337\331\377\333\336\330\377\332\336\330\377"
- "\332\336\327\377\331\335\327\377\331\335\326\377\331\334\326\377\202"
- "\330\334\325\377\202\327\333\324\377\202\326\332\323\377\202\325\331"
- "\322\377\13\324\331\321\377\324\330\320\377\323\330\320\377\323\327\317"
- "\377\322\327\317\377\322\326\316\377\321\326\316\377\321\326\315\377"
- "\320\325\315\377\320\325\314\377\320\324\314\377\202\317\324\313\377"
- "\202\316\323\312\377\202\315\322\311\377\202\314\321\310\377\11\313\321"
- "\307\377\313\320\306\377\312\320\306\377\312\317\305\377\311\317\305"
- "\377\311\316\304\377\310\316\304\377\310\316\303\377\251\255\245\377"
- "\206oqm\377\1oqm\207\377\377\377\377\0\2\235\237\233&\235\237\233\366"
- "\205\235\237\233\377\4\271\274\266\377\331\335\326\377\331\335\327\377"
- "\346\351\344\377\210\375\375\375\377\202\375\375\374\377\3\374\375\374"
- "\377\374\374\374\377\354\356\353\377\202\340\343\336\377\1\340\344\337"
- "\377\202\341\344\337\377\202\342\345\340\377\4\342\345\341\377\343\346"
- "\341\377\343\346\342\377\344\346\342\377\202\344\347\343\377\7\345\347"
- "\343\377\345\350\344\377\346\350\344\377\346\351\345\377\347\351\345"
- "\377\347\351\346\377\347\352\346\377\202\350\352\347\377\205\351\353"
- "\350\377\21\350\352\347\377\350\352\346\377\347\351\346\377\347\351\345"
- "\377\346\351\345\377\346\350\344\377\345\350\344\377\345\347\343\377"
- "\344\347\343\377\344\347\342\377\343\346\342\377\343\346\341\377\335"
- "\340\334\377\330\333\326\377\324\326\322\377\330\333\326\377\336\341"
- "\334\377\202\340\343\336\377\202\337\342\335\377\202\336\341\334\377"
- "\13\335\341\333\377\335\340\332\377\334\340\332\377\334\337\331\377\333"
- "\337\331\377\333\336\330\377\332\336\330\377\332\336\327\377\332\335"
- "\327\377\331\335\326\377\331\334\326\377\202\330\334\325\377\202\327"
- "\333\324\377\202\326\332\323\377\202\325\331\322\377\5\324\331\321\377"
- "\324\330\320\377\323\330\320\377\323\327\317\377\322\327\317\377\202"
- "\322\326\316\377\4\321\326\315\377\320\325\315\377\320\325\314\377\320"
- "\324\314\377\202\317\324\313\377\202\316\323\312\377\202\315\322\311"
- "\377\202\314\321\310\377\13\313\321\307\377\313\320\307\377\312\320\306"
- "\377\312\317\306\377\311\317\305\377\311\316\304\377\310\316\304\377"
- "\310\316\303\377\310\315\303\377\307\315\302\377\235\241\232\377\205"
- "oqm\377\2oqm\374oqm7\375\377\377\377\0\2\235\237\233\2\235\237\233\306"
- "\205\235\237\233\377\6\261\263\256\377\331\335\326\377\331\335\327\377"
- "\336\342\334\377\372\373\372\377\375\375\374\377\206\375\375\375\377"
- "\202\375\375\374\377\3\374\375\374\377\373\373\372\377\350\352\346\377"
- "\203\340\343\336\377\202\341\344\337\377\202\342\345\340\377\4\342\345"
- "\341\377\343\346\341\377\343\346\342\377\344\346\342\377\202\344\347"
- "\343\377\3\345\347\343\377\345\350\344\377\346\350\344\377\202\346\351"
- "\345\377\2\347\351\346\377\347\352\346\377\202\350\352\347\377\1\351"
- "\353\347\377\204\351\353\350\377\202\350\352\347\377\13\335\340\334\377"
- "\313\315\312\377\270\272\266\377\246\250\244\377\224\226\222\377\214"
- "\216\212\377\206\210\204\377\200\203~\377{}y\377uws\377prn\377\205oq"
- "m\377\20qso\377vxt\377|~z\377\201\203\177\377\206\210\204\377\213\216"
- "\211\377\225\227\223\377\245\250\243\377\265\270\262\377\305\310\303"
- "\377\325\331\322\377\333\336\330\377\332\336\327\377\332\335\327\377"
- "\331\335\326\377\331\334\326\377\202\330\334\325\377\202\327\333\324"
- "\377\202\326\332\323\377\15\325\332\322\377\325\331\322\377\324\331\321"
- "\377\324\330\321\377\323\330\320\377\323\327\320\377\322\327\317\377"
- "\322\327\316\377\322\326\316\377\321\326\315\377\321\325\315\377\320"
- "\325\314\377\320\324\314\377\202\317\324\313\377\202\316\323\312\377"
- "\202\315\322\311\377\202\314\321\310\377\4\313\321\307\377\313\320\307"
- "\377\312\320\306\377\312\317\306\377\202\311\317\305\377\7\311\316\304"
- "\377\310\316\303\377\310\315\303\377\307\315\302\377\307\314\302\377"
- "\306\314\301\377\221\225\216\377\205oqm\377\2oqm\327oqm\10\374\377\377"
- "\377\0\1\235\237\233v\205\235\237\233\377\5\244\246\241\377\325\331\323"
- "\377\331\335\327\377\332\336\327\377\364\365\364\377\203\374\375\374"
- "\377\204\375\375\374\377\203\374\375\374\377\3\370\371\370\377\344\347"
- "\342\377\337\343\336\377\202\340\343\336\377\202\341\344\337\377\202"
- "\342\345\340\377\15\342\345\341\377\343\346\341\377\343\346\342\377\344"
- "\346\342\377\344\347\342\377\344\347\343\377\345\347\343\377\345\350"
- "\344\377\346\350\344\377\346\350\345\377\346\351\345\377\347\351\346"
- "\377\347\352\346\377\202\350\352\347\377\1\350\353\347\377\202\351\353"
- "\350\377\5\326\330\325\377\264\266\263\377\234\236\232\377\212\214\210"
- "\377wyu\377\233oqm\377\6xzv\377\211\213\206\377\231\234\227\377\265\267"
- "\262\377\320\324\315\377\330\334\325\377\202\327\333\324\377\202\326"
- "\332\323\377\15\325\332\322\377\325\331\322\377\324\331\321\377\324\330"
- "\321\377\323\330\320\377\323\327\320\377\323\327\317\377\322\327\317"
- "\377\322\326\316\377\321\326\316\377\321\325\315\377\320\325\314\377"
- "\320\324\314\377\202\317\324\313\377\202\316\323\312\377\202\315\322"
- "\311\377\15\314\322\310\377\314\321\310\377\313\321\307\377\313\320\307"
- "\377\312\320\306\377\312\317\306\377\312\317\305\377\311\317\305\377"
- "\311\316\304\377\310\316\304\377\310\315\303\377\307\315\302\377\307"
- "\314\302\377\202\306\314\301\377\2\303\311\276\377}\200{\377\205oqm\377"
- "\1oqm\215\373\377\377\377\0\2\235\237\233(\235\237\233\370\205\235\237"
- "\233\377\4\310\314\306\377\331\335\327\377\332\336\327\377\353\355\352"
- "\377\204\374\374\374\377\206\374\375\374\377\3\366\367\365\377\341\344"
- "\340\377\337\343\335\377\202\340\343\336\377\202\341\344\337\377\25\341"
- "\344\340\377\342\345\340\377\342\345\341\377\343\346\341\377\343\346"
- "\342\377\344\346\342\377\344\347\342\377\344\347\343\377\345\347\343"
- "\377\345\350\344\377\346\350\344\377\346\350\345\377\346\351\345\377"
- "\347\351\346\377\347\352\346\377\350\352\346\377\350\352\347\377\341"
- "\344\340\377\302\304\301\377\241\243\237\377\177\201}\377\244oqm\377"
- "\20prn\377\205\207\203\377\242\245\240\377\277\302\274\377\325\331\322"
- "\377\325\332\322\377\325\331\322\377\324\331\321\377\324\330\321\377"
- "\324\330\320\377\323\330\320\377\323\327\317\377\322\327\317\377\322"
- "\326\316\377\321\326\316\377\321\325\315\377\202\320\325\314\377\202"
- "\317\324\313\377\202\316\323\312\377\202\315\322\311\377\17\314\322\310"
- "\377\314\321\310\377\314\321\307\377\313\320\307\377\313\320\306\377"
- "\312\317\306\377\312\317\305\377\311\317\305\377\311\316\304\377\310"
- "\316\304\377\310\315\303\377\307\315\303\377\307\314\302\377\306\314"
- "\302\377\306\314\301\377\202\305\313\300\377\2\263\270\257\377prn\377"
- "\204oqm\377\2oqm\375oqm;\372\377\377\377\0\1\235\237\233\255\205\235"
- "\237\233\377\5\265\267\262\377\331\335\327\377\332\336\327\377\342\345"
- "\340\377\373\374\373\377\206\374\374\374\377\1\374\375\374\377\202\374"
- "\374\374\377\3\367\370\366\377\341\344\337\377\337\343\335\377\202\340"
- "\343\336\377\202\341\344\337\377\4\341\344\340\377\342\345\340\377\342"
- "\345\341\377\343\346\341\377\202\343\346\342\377\16\344\347\342\377\344"
- "\347\343\377\345\347\343\377\345\350\344\377\346\350\344\377\346\350"
- "\345\377\346\351\345\377\347\351\345\377\347\351\346\377\344\346\342"
- "\377\273\275\272\377\216\220\214\377suq\377qso\377\252oqm\377\17uxs\377"
- "\223\226\221\377\277\302\273\377\324\330\321\377\324\330\320\377\323"
- "\330\320\377\323\327\317\377\322\327\317\377\322\326\316\377\321\326"
- "\316\377\321\325\315\377\320\325\315\377\320\325\314\377\317\324\314"
- "\377\317\324\313\377\202\316\323\312\377\202\315\322\311\377\20\315\322"
- "\310\377\314\321\310\377\314\321\307\377\313\320\307\377\313\320\306"
- "\377\312\320\306\377\312\317\305\377\311\317\305\377\311\316\304\377"
- "\310\316\304\377\310\315\303\377\307\315\303\377\307\315\302\377\306"
- "\314\302\377\306\314\301\377\305\313\301\377\203\305\313\300\377\1\230"
- "\234\224\377\205oqm\377\1oqm\305\371\377\377\377\0\2\235\237\2330\235"
- "\237\233\376\204\235\237\233\377\5\244\246\242\377\326\332\324\377\332"
- "\336\327\377\334\340\332\377\367\370\366\377\202\373\374\373\377\1\374"
- "\374\373\377\206\374\374\374\377\3\370\371\370\377\342\345\340\377\337"
- "\343\335\377\202\340\343\336\377\202\341\344\337\377\11\341\344\340\377"
- "\342\345\340\377\342\345\341\377\343\345\341\377\343\346\341\377\343"
- "\346\342\377\344\347\342\377\344\347\343\377\345\347\343\377\202\345"
- "\350\344\377\11\346\350\345\377\346\351\345\377\347\351\345\377\333\335"
- "\331\377\254\256\252\377}\177{\377suq\377qso\377prn\377\256oqm\377\14"
- "\204\206\202\377\257\262\254\377\321\325\315\377\322\327\317\377\322"
- "\326\316\377\321\326\316\377\321\325\315\377\320\325\315\377\320\325"
- "\314\377\317\324\314\377\317\324\313\377\316\323\313\377\202\316\323"
- "\312\377\21\315\322\311\377\315\322\310\377\314\321\310\377\314\321\307"
- "\377\313\320\307\377\313\320\306\377\312\320\306\377\312\317\305\377"
- "\311\317\305\377\311\316\304\377\310\316\304\377\310\315\303\377\307"
- "\315\303\377\307\315\302\377\306\314\302\377\306\314\301\377\305\313"
- "\301\377\204\305\313\300\377\2\303\311\276\377~\200{\377\205oqm\377\1"
- "oqmG\370\377\377\377\0\1\235\237\233\261\205\235\237\233\377\5\307\312"
- "\305\377\332\336\327\377\332\336\330\377\357\360\356\377\373\373\373"
- "\377\203\373\374\373\377\203\374\374\373\377\202\374\374\374\377\3\371"
- "\372\371\377\343\346\341\377\337\343\335\377\202\340\343\336\377\202"
- "\341\344\337\377\1\341\344\340\377\202\342\345\340\377\6\343\345\341"
- "\377\343\346\341\377\343\346\342\377\344\347\342\377\344\347\343\377"
- "\345\347\343\377\202\345\350\344\377\11\346\350\345\377\346\351\345\377"
- "\317\321\315\377\234\236\232\377wyu\377tvr\377rtp\377qso\377prn\377\213"
- "oqm\377\27oqm\373oqm\332oqm\265oqm\226oqm\211oqm}oqmqoqmeoqmYoqmMoqm"
- "Aoqm9oqmCoqmOoqm[oqmfoqmroqm~oqm\212oqm\226oqm\265oqm\334oqm\374\217"
- "oqm\377\11xzv\377\240\243\235\377\312\317\310\377\321\326\315\377\320"
- "\325\315\377\320\325\314\377\317\324\314\377\317\324\313\377\316\323"
- "\313\377\202\316\323\312\377\21\315\322\311\377\315\322\310\377\314\321"
- "\310\377\314\321\307\377\313\320\307\377\313\320\306\377\312\320\306"
- "\377\312\317\305\377\311\317\305\377\311\316\304\377\310\316\304\377"
- "\310\316\303\377\307\315\303\377\307\315\302\377\306\314\302\377\306"
- "\314\301\377\306\313\301\377\206\305\313\300\377\1\263\270\257\377\205"
- "oqm\377\1oqm\311\367\377\377\377\0\1\235\237\2334\205\235\237\233\377"
- "\1\252\254\250\377\202\332\336\327\377\2\337\342\335\377\372\373\372"
- "\377\202\373\373\373\377\204\373\374\373\377\203\374\374\373\377\2\347"
- "\351\346\377\337\343\335\377\202\340\343\336\377\3\340\344\337\377\341"
- "\344\337\377\341\344\340\377\202\342\345\340\377\6\343\345\341\377\343"
- "\346\341\377\343\346\342\377\344\346\342\377\344\347\343\377\345\347"
- "\343\377\202\345\350\344\377\11\346\350\344\377\336\341\335\377\242\244"
- "\240\377vxt\377uws\377suq\377rtp\377qso\377prn\377\206oqm\377\7oqm\376"
- "oqm\320oqm\224oqmooqmIoqm$oqm\4\225\377\377\377\0\6oqm\6oqm*oqmQoqmx"
- "oqm\243oqm\346\214oqm\377\6wzu\377\256\262\253\377\320\325\314\377\317"
- "\324\314\377\317\324\313\377\317\323\313\377\202\316\323\312\377\202"
- "\315\322\311\377\202\314\321\310\377\15\313\320\307\377\313\320\306\377"
- "\312\320\306\377\312\317\305\377\311\317\305\377\311\316\304\377\310"
- "\316\304\377\310\316\303\377\307\315\303\377\307\315\302\377\307\314"
- "\302\377\306\314\301\377\306\313\301\377\210\305\313\300\377\1\213\216"
- "\210\377\205oqm\377\1oqmK\366\377\377\377\0\1\235\237\233\265\205\235"
- "\237\233\377\6\310\314\306\377\332\336\327\377\332\336\330\377\356\360"
- "\355\377\372\373\372\377\373\373\372\377\203\373\373\373\377\204\373"
- "\374\373\377\2\357\360\355\377\337\343\335\377\202\340\343\336\377\1"
- "\340\344\337\377\202\341\344\337\377\202\342\345\340\377\5\342\345\341"
- "\377\343\346\341\377\343\346\342\377\344\346\342\377\344\347\343\377"
- "\202\345\347\343\377\12\345\350\344\377\346\350\344\377\275\300\274\377"
- "\200\202~\377vxt\377tvr\377suq\377rtp\377qso\377prn\377\204oqm\377\4"
- "oqm\353oqm\246oqm_oqm\30\241\377\377\377\0\4oqm.oqmvoqm\276oqm\372\212"
- "oqm\377\3\212\214\207\377\302\307\276\377\317\324\313\377\202\316\323"
- "\312\377\202\315\322\311\377\202\314\321\310\377\13\313\321\307\377\313"
- "\320\307\377\312\320\306\377\312\317\306\377\311\317\305\377\311\316"
- "\304\377\310\316\304\377\310\316\303\377\310\315\303\377\307\315\302"
- "\377\307\314\302\377\202\306\314\301\377\211\305\313\300\377\1\266\273"
- "\261\377\205oqm\377\1oqm\315\365\377\377\377\0\1\235\237\2336\205\235"
- "\237\233\377\5\253\255\251\377\332\336\327\377\332\336\330\377\336\342"
- "\333\377\371\372\371\377\202\372\373\372\377\1\373\373\372\377\204\373"
- "\373\373\377\2\373\374\373\377\365\366\365\377\204\340\343\336\377\202"
- "\341\344\337\377\202\342\345\340\377\4\342\345\341\377\343\346\341\377"
- "\343\346\342\377\344\346\342\377\202\344\347\343\377\12\345\347\343\377"
- "\345\350\344\377\326\330\324\377\224\226\222\377wyu\377uws\377tvr\377"
- "suq\377rtp\377qso\377\203oqm\377\4oqm\360oqm\215oqm5oqm\2\247\377\377"
- "\377\0\4oqm\14oqmQoqm\271oqm\376\210oqm\377\2rtp\377\241\244\236\377"
- "\203\315\322\311\377\202\314\321\310\377\5\313\321\307\377\313\320\307"
- "\377\312\320\306\377\312\317\306\377\311\317\305\377\202\311\316\304"
- "\377\4\310\316\303\377\310\315\303\377\307\315\302\377\307\314\302\377"
- "\202\306\314\301\377\213\305\313\300\377\1\213\216\210\377\205oqm\377"
- "\1oqmL\364\377\377\377\0\1\235\237\233\233\205\235\237\233\377\5\312"
- "\315\307\377\332\336\330\377\333\336\330\377\354\356\353\377\372\372"
- "\372\377\203\372\373\372\377\202\373\373\372\377\202\373\373\373\377"
- "\2\373\373\372\377\343\346\342\377\203\340\343\336\377\202\341\344\337"
- "\377\202\342\345\340\377\20\342\345\341\377\343\346\341\377\343\346\342"
- "\377\344\346\342\377\344\347\342\377\344\347\343\377\345\347\343\377"
- "\345\350\344\377\312\314\310\377\177\201}\377vxt\377uws\377tvr\377su"
- "q\377rtp\377prn\377\202oqm\377\3oqm\327oqmjoqm\13\255\377\377\377\0\3"
- "oqm)oqm\227oqm\365\210oqm\377\17\215\220\212\377\312\317\306\377\314"
- "\322\310\377\314\321\310\377\313\321\307\377\313\320\307\377\312\320"
- "\306\377\312\317\306\377\312\317\305\377\311\317\305\377\311\316\304"
- "\377\310\316\304\377\310\315\303\377\307\315\302\377\307\314\302\377"
- "\202\306\314\301\377\214\305\313\300\377\1\266\273\261\377\205oqm\377"
- "\1oqm\260\363\377\377\377\0\2\235\237\233\10\235\237\233\360\204\235"
- "\237\233\377\6\252\255\250\377\332\336\330\377\333\336\330\377\335\341"
- "\333\377\370\371\370\377\372\372\371\377\204\372\373\372\377\203\373"
- "\373\372\377\2\357\361\357\377\337\343\336\377\202\340\343\336\377\202"
- "\341\344\337\377\26\341\344\340\377\342\345\340\377\342\345\341\377\343"
- "\346\341\377\343\346\342\377\344\346\342\377\344\347\342\377\344\347"
- "\343\377\345\347\343\377\345\350\344\377\274\276\272\377y{w\377vxt\377"
- "uws\377tvr\377suq\377qso\377prn\377oqm\377oqm\304oqmFoqm\1\261\377\377"
- "\377\0\3oqm\21oqmyoqm\363\207oqm\377\17\203\206\201\377\304\311\301\377"
- "\314\321\307\377\313\320\307\377\313\320\306\377\312\317\306\377\312"
- "\317\305\377\311\317\305\377\311\316\304\377\310\316\304\377\310\315"
- "\303\377\307\315\303\377\307\314\302\377\306\314\302\377\306\314\301"
- "\377\216\305\313\300\377\1\213\216\210\377\204oqm\377\2oqm\372oqm\23"
- "\362\377\377\377\0\1\235\237\233V\203\235\237\233\377\6\234\236\232\377"
- "\233\235\231\377\304\307\302\377\332\336\330\377\333\337\331\377\352"
- "\354\350\377\203\372\372\371\377\205\372\373\372\377\2\371\372\371\377"
- "\341\345\340\377\202\340\343\336\377\202\341\344\337\377\4\341\344\340"
- "\377\342\345\340\377\342\345\341\377\343\346\341\377\202\343\346\342"
- "\377\17\344\347\342\377\344\347\343\377\345\347\343\377\345\350\344\377"
- "\254\256\252\377wyu\377vxt\377uws\377tvr\377rtp\377qso\377prn\377oqm"
- "\355oqmdoqm\1\265\377\377\377\0\2oqm\35oqm\260\207oqm\377\15{~y\377\275"
- "\302\272\377\313\320\306\377\312\320\306\377\312\317\305\377\311\317"
- "\305\377\311\316\304\377\310\316\304\377\310\315\303\377\307\315\303"
- "\377\307\315\302\377\306\314\302\377\306\314\301\377\217\305\313\300"
- "\377\1\257\264\253\377\205oqm\377\1oqmj\362\377\377\377\0\1\235\237\233"
- "\264\202\235\237\233\377\7\234\236\232\377\233\235\231\377\236\240\234"
- "\377\330\334\326\377\333\337\330\377\334\340\332\377\367\367\366\377"
- "\202\371\372\371\377\202\372\372\371\377\1\372\372\372\377\203\372\373"
- "\372\377\1\355\357\353\377\202\340\343\336\377\202\341\344\337\377\3"
- "\341\344\340\377\342\345\340\377\342\345\341\377\202\343\346\341\377"
- "\17\343\346\342\377\344\347\342\377\344\347\343\377\345\347\343\377\345"
- "\350\344\377\244\246\242\377wyu\377vxt\377tvr\377suq\377rtp\377qso\377"
- "prn\377oqm\242oqm\25\271\377\377\377\0\2oqmOoqm\342\206oqm\377\14vxt"
- "\377\276\303\272\377\312\317\305\377\311\317\305\377\311\316\304\377"
- "\310\316\304\377\310\315\303\377\307\315\303\377\307\315\302\377\306"
- "\314\302\377\306\314\301\377\305\313\301\377\217\305\313\300\377\2\304"
- "\312\277\377y{v\377\204oqm\377\1oqm\307\361\377\377\377\0\12\235\237"
- "\233\26\235\237\233\373\235\237\233\377\234\236\232\377\233\235\231\377"
- "\231\233\227\377\262\265\260\377\333\337\330\377\333\337\331\377\345"
- "\347\343\377\204\371\372\371\377\1\372\372\371\377\202\372\372\372\377"
- "\4\372\373\372\377\371\372\371\377\341\344\340\377\340\343\336\377\202"
- "\341\344\337\377\1\341\344\340\377\202\342\345\340\377\20\343\345\341"
- "\377\343\346\341\377\343\346\342\377\344\347\342\377\344\347\343\377"
- "\345\347\343\377\345\350\344\377\263\266\262\377wyu\377uws\377tvr\377"
- "suq\377rtp\377qso\377oqm\367oqmV\274\377\377\377\0\2oqm\17oqm\274\206"
- "oqm\377\12~\200{\377\304\312\300\377\311\316\304\377\310\316\304\377"
- "\310\316\303\377\307\315\303\377\307\315\302\377\306\314\302\377\306"
- "\314\301\377\306\313\301\377\221\305\313\300\377\1\227\233\224\377\205"
- "oqm\377\1oqm$\360\377\377\377\0\13\235\237\233o\235\237\233\377\234\236"
- "\232\377\232\234\230\377\231\233\227\377\230\232\226\377\313\317\310"
- "\377\333\337\331\377\334\337\331\377\355\357\354\377\371\371\370\377"
- "\204\371\372\371\377\1\372\372\371\377\202\372\372\372\377\5\360\362"
- "\357\377\340\343\336\377\340\344\337\377\341\344\337\377\341\344\340"
- "\377\202\342\345\340\377\20\343\345\341\377\343\346\341\377\343\346\342"
- "\377\344\347\342\377\344\347\343\377\345\347\343\377\345\350\344\377"
- "\302\305\301\377vxt\377uws\377tvr\377suq\377rtp\377prn\377oqm\353oqm"
- ":\276\377\377\377\0\2oqm\5oqm\236\206oqm\377\10\211\214\206\377\307\315"
- "\303\377\310\316\303\377\307\315\303\377\307\315\302\377\307\314\302"
- "\377\306\314\301\377\306\313\301\377\222\305\313\300\377\1\267\275\263"
- "\377\205oqm\377\1oqm\200\360\377\377\377\0\13\235\237\233\277\233\235"
- "\231\377\232\234\230\377\231\233\227\377\230\232\226\377\240\243\236"
- "\377\333\337\331\377\334\337\331\377\334\340\332\377\366\367\365\377"
- "\371\371\370\377\205\371\372\371\377\202\372\372\371\377\4\346\351\345"
- "\377\340\344\337\377\341\344\337\377\341\344\340\377\202\342\345\340"
- "\377\5\342\345\341\377\343\346\341\377\343\346\342\377\344\346\342\377"
- "\344\347\343\377\202\345\347\343\377\11\316\321\315\377z|x\377uws\377"
- "tvr\377suq\377qso\377prn\377oqm\332oqm$\301\377\377\377\0\1oqm|\206o"
- "qm\377\6\226\232\223\377\310\315\303\377\307\315\302\377\307\314\302"
- "\377\306\314\301\377\306\313\301\377\224\305\313\300\377\1\200\203~\377"
- "\204oqm\377\1oqm\313\357\377\377\377\0\12\234\236\232\7\233\235\231\367"
- "\232\234\230\377\231\233\227\377\230\232\226\377\226\230\224\377\267"
- "\272\265\377\333\337\331\377\334\340\332\377\341\345\340\377\202\370"
- "\371\370\377\2\371\371\370\377\371\371\371\377\203\371\372\371\377\3"
- "\372\372\371\377\366\367\366\377\340\344\337\377\202\341\344\337\377"
- "\202\342\345\340\377\4\342\345\341\377\343\346\341\377\343\346\342\377"
- "\344\346\342\377\202\344\347\343\377\12\345\347\343\377\342\345\341\377"
- "\206\210\204\377uws\377tvr\377rtp\377qso\377prn\377oqm\340oqm\27\303"
- "\377\377\377\0\1oqm\213\206oqm\377\2\256\263\252\377\307\314\302\377"
- "\202\306\314\301\377\225\305\313\300\377\1\236\242\233\377\204oqm\377"
- "\2oqm\374oqm\15\356\377\377\377\0\7\233\235\231=\232\234\230\377\231"
- "\233\227\377\227\231\225\377\226\230\224\377\225\227\223\377\311\315"
- "\307\377\202\334\340\332\377\1\352\354\350\377\202\370\371\370\377\202"
- "\371\371\370\377\204\371\372\371\377\1\355\356\353\377\202\341\344\337"
- "\377\202\342\345\340\377\4\342\345\341\377\343\346\341\377\343\346\342"
- "\377\344\346\342\377\202\344\347\343\377\12\345\347\343\377\345\350\344"
- "\377\254\256\252\377uws\377suq\377rtp\377qso\377prn\377oqm\363oqm.\304"
- "\377\377\377\0\2oqm\2oqm\260\205oqm\377\3{}y\377\303\311\276\377\306"
- "\314\301\377\226\305\313\300\377\1\264\271\260\377\205oqm\377\1oqmG\356"
- "\377\377\377\0\12\231\233\227|\230\232\226\377\227\231\225\377\226\230"
- "\224\377\225\227\223\377\226\230\224\377\332\335\327\377\334\340\332"
- "\377\335\340\332\377\362\364\361\377\203\370\371\370\377\202\371\371"
- "\370\377\203\371\372\371\377\2\347\351\345\377\341\344\337\377\202\342"
- "\345\340\377\20\342\345\341\377\343\346\341\377\343\346\342\377\344\346"
- "\342\377\344\347\342\377\344\347\343\377\345\347\343\377\345\350\344"
- "\377\323\325\321\377vxt\377suq\377rtp\377qso\377prn\377oqm\375oqmM\306"
- "\377\377\377\0\2oqm\13oqm\316\205oqm\377\1\231\235\226\377\227\305\313"
- "\300\377\2\304\312\277\377tvr\377\204oqm\377\1oqm\205\356\377\377\377"
- "\0\12\230\232\226\274\227\231\225\377\226\230\224\377\224\226\222\377"
- "\223\225\221\377\244\246\241\377\334\340\332\377\335\340\332\377\337"
- "\343\335\377\367\370\367\377\205\370\371\370\377\23\371\371\370\377\371"
- "\372\371\377\371\371\370\377\342\345\340\377\341\344\340\377\342\345"
- "\340\377\342\345\341\377\343\346\341\377\343\346\342\377\344\346\342"
- "\377\344\347\342\377\344\347\343\377\345\347\343\377\345\350\344\377"
- "\346\350\344\377\216\220\215\377suq\377rtp\377qso\377\202oqm\377\1oq"
- "m\177\310\377\377\377\0\2oqm,oqm\373\204oqm\377\2qso\377\270\275\263"
- "\377\206\305\313\300\377\10\307\315\302\377\312\317\305\377\311\317\304"
- "\377\310\316\304\377\310\315\303\377\307\315\302\377\307\314\302\377"
- "\306\314\301\377\202\305\313\300\377\2\306\314\301\377\305\313\301\377"
- "\205\305\313\300\377\1\207\212\204\377\204oqm\377\1oqm\303\355\377\377"
- "\377\0\14\230\232\226\5\227\231\225\365\225\227\223\377\224\226\222\377"
- "\223\225\221\377\222\224\220\377\265\270\263\377\335\340\332\377\335"
- "\340\333\377\347\351\345\377\370\370\367\377\370\371\367\377\203\370"
- "\371\370\377\203\371\371\370\377\4\364\365\363\377\341\344\340\377\342"
- "\345\340\377\342\345\341\377\202\343\346\341\377\12\343\346\342\377\344"
- "\347\342\377\344\347\343\377\345\347\343\377\345\350\344\377\346\350"
- "\344\377\303\305\301\377suq\377qso\377prn\377\202oqm\377\2oqm\325oqm"
- "\6\311\377\377\377\0\1oqm\211\205oqm\377\1\217\222\214\377\206\305\313"
- "\300\377\14\311\317\304\377\317\324\313\377\316\323\311\377\314\322\310"
- "\377\313\320\306\377\312\317\305\377\310\316\304\377\307\315\302\377"
- "\306\314\301\377\305\313\300\377\307\314\302\377\306\314\301\377\205"
- "\305\313\300\377\1\234\240\230\377\204oqm\377\2oqm\371oqm\10\354\377"
- "\377\377\0\15\226\230\2249\225\227\223\377\224\226\222\377\223\225\221"
- "\377\222\224\220\377\220\222\216\377\307\313\305\377\335\340\333\377"
- "\335\341\333\377\355\356\354\377\367\370\367\377\370\370\367\377\370"
- "\371\367\377\203\370\371\370\377\202\371\371\370\377\1\357\360\356\377"
- "\202\342\345\340\377\6\343\345\341\377\343\346\341\377\343\346\342\377"
- "\344\347\342\377\344\347\343\377\345\347\343\377\202\345\350\344\377"
- "\4\346\350\345\377\214\217\213\377qso\377prn\377\202oqm\377\2oqm\376"
- "oqm<\312\377\377\377\0\2oqm\12oqm\340\204oqm\377\2qso\377\275\303\271"
- "\377\205\305\313\300\377\10\311\317\304\377\317\324\313\377\316\323\311"
- "\377\315\322\310\377\313\321\307\377\312\317\305\377\311\316\304\377"
- "\307\315\302\377\202\306\314\301\377\2\307\315\302\377\306\314\301\377"
- "\205\305\313\300\377\1\261\266\254\377\205oqm\377\1oqm\77\354\377\377"
- "\377\0\4\225\227\223b\224\226\222\377\223\225\221\377\221\223\217\377"
- "\202\220\222\216\377\6\332\335\330\377\335\341\333\377\336\341\334\377"
- "\361\362\360\377\367\370\367\377\370\370\367\377\202\370\371\367\377"
- "\204\370\371\370\377\10\352\354\351\377\342\345\340\377\343\345\341\377"
- "\343\346\341\377\343\346\342\377\344\347\342\377\344\347\343\377\345"
- "\347\343\377\202\345\350\344\377\4\346\350\345\377\314\316\312\377qs"
- "o\377prn\377\203oqm\377\1oqm\243\314\377\377\377\0\1oqmR\205oqm\377\1"
- "\231\235\226\377\205\305\313\300\377\14\311\317\304\377\317\324\313\377"
- "\316\323\312\377\315\322\310\377\313\321\307\377\312\317\305\377\311"
- "\316\304\377\310\315\303\377\307\315\302\377\307\314\302\377\307\315"
- "\302\377\306\314\301\377\205\305\313\300\377\2\303\311\276\377qso\377"
- "\204oqm\377\1oqml\354\377\377\377\0\12\224\226\222\206\222\224\220\377"
- "\221\223\217\377\220\222\216\377\217\221\215\377\231\233\227\377\335"
- "\341\333\377\336\341\333\377\336\341\334\377\365\366\365\377\202\367"
- "\370\367\377\2\370\370\367\377\370\371\367\377\203\370\371\370\377\10"
- "\371\371\370\377\347\351\345\377\342\345\341\377\343\346\341\377\343"
- "\346\342\377\344\346\342\377\344\347\343\377\345\347\343\377\202\345"
- "\350\344\377\4\346\350\344\377\346\351\345\377\226\230\224\377prn\377"
- "\204oqm\377\1oqm,\314\377\377\377\0\2oqm\1oqm\333\204oqm\377\2vyt\377"
- "\303\311\276\377\204\305\313\300\377\10\311\317\304\377\317\324\313\377"
- "\316\323\312\377\315\322\310\377\314\321\307\377\312\320\306\377\311"
- "\317\304\377\310\316\303\377\202\310\315\303\377\2\310\316\303\377\306"
- "\314\301\377\206\305\313\300\377\1~\201|\377\204oqm\377\1oqm\217\354"
- "\377\377\377\0\12\222\224\220\252\221\223\217\377\220\222\216\377\217"
- "\221\215\377\215\217\213\377\242\245\240\377\336\341\333\377\336\341"
- "\334\377\340\344\336\377\367\370\366\377\203\367\370\367\377\203\370"
- "\371\367\377\202\370\371\370\377\4\345\350\344\377\343\346\341\377\343"
- "\346\342\377\344\346\342\377\202\344\347\343\377\6\345\347\343\377\345"
- "\350\344\377\346\350\344\377\346\351\345\377\335\337\333\377prn\377\204"
- "oqm\377\1oqm\266\316\377\377\377\0\1oqmn\205oqm\377\1\250\255\244\377"
- "\204\305\313\300\377\10\311\317\304\377\317\324\313\377\316\323\312\377"
- "\315\322\311\377\314\321\307\377\313\320\306\377\312\317\305\377\311"
- "\316\304\377\202\310\316\303\377\2\310\316\304\377\306\314\302\377\206"
- "\305\313\300\377\1\212\215\207\377\204oqm\377\1oqm\262\354\377\377\377"
- "\0\12\221\223\217\316\220\222\216\377\216\220\214\377\215\217\213\377"
- "\214\216\212\377\255\260\253\377\336\341\334\377\336\342\334\377\345"
- "\350\344\377\367\367\366\377\203\367\370\367\377\202\370\370\367\377"
- "\1\370\371\367\377\202\370\371\370\377\3\344\347\342\377\343\346\342"
- "\377\344\346\342\377\202\344\347\343\377\3\345\347\343\377\345\350\344"
- "\377\346\350\344\377\202\346\351\345\377\1\267\271\266\377\205oqm\377"
- "\1oqmA\316\377\377\377\0\2oqm\15oqm\362\204oqm\377\1\216\221\213\377"
- "\204\305\313\300\377\10\311\317\305\377\320\325\314\377\317\324\312\377"
- "\315\323\311\377\314\322\310\377\313\321\307\377\312\320\306\377\311"
- "\317\305\377\202\311\316\304\377\2\311\317\304\377\307\314\302\377\206"
- "\305\313\300\377\1\226\232\222\377\204oqm\377\1oqm\325\354\377\377\377"
- "\0\11\217\221\215\362\216\220\214\377\215\217\213\377\214\216\212\377"
- "\213\215\211\377\271\274\267\377\336\342\334\377\337\342\335\377\351"
- "\353\350\377\203\367\370\366\377\202\367\370\367\377\17\370\370\367\377"
- "\370\371\367\377\370\371\370\377\370\370\367\377\343\346\342\377\344"
- "\346\342\377\344\347\342\377\344\347\343\377\345\347\343\377\345\350"
- "\344\377\346\350\344\377\346\350\345\377\346\351\345\377\347\351\346"
- "\377\217\222\216\377\204oqm\377\2oqm\341oqm\1\317\377\377\377\0\1oqm"
- "\237\204oqm\377\2twr\377\304\312\277\377\203\305\313\300\377\7\311\317"
- "\305\377\320\325\314\377\317\324\313\377\316\323\311\377\315\322\310"
- "\377\314\321\307\377\313\320\306\377\204\312\317\305\377\1\307\315\302"
- "\377\206\305\313\300\377\1\242\246\236\377\204oqm\377\2oqm\366oqm\1\352"
- "\377\377\377\0\7\217\221\215\26\216\220\214\377\215\217\213\377\213\215"
- "\211\377\212\214\210\377\211\213\207\377\305\310\303\377\202\337\342"
- "\335\377\3\355\357\354\377\367\367\366\377\367\370\366\377\204\367\370"
- "\367\377\16\370\370\367\377\370\371\367\377\366\367\366\377\344\346\342"
- "\377\344\347\342\377\344\347\343\377\345\347\343\377\345\350\344\377"
- "\346\350\344\377\346\350\345\377\346\351\345\377\347\351\346\377\337"
- "\341\335\377qso\377\204oqm\377\1oqm\214\320\377\377\377\0\1oqmO\205o"
- "qm\377\1\257\264\253\377\203\305\313\300\377\10\311\317\305\377\320\325"
- "\314\377\317\324\313\377\316\323\312\377\315\322\311\377\314\321\310"
- "\377\313\321\307\377\313\320\306\377\203\312\320\306\377\1\307\315\302"
- "\377\206\305\313\300\377\1\255\262\251\377\205oqm\377\1oqm\32\352\377"
- "\377\377\0\13\216\220\214:\214\216\212\377\213\215\211\377\212\214\210"
- "\377\211\213\207\377\210\212\206\377\322\325\320\377\337\342\335\377"
- "\337\343\335\377\362\363\361\377\366\367\366\377\202\367\370\366\377"
- "\203\367\370\367\377\15\370\370\367\377\370\371\367\377\364\365\364\377"
- "\344\347\342\377\344\347\343\377\345\347\343\377\345\350\344\377\346"
- "\350\344\377\346\350\345\377\346\351\345\377\347\351\345\377\347\351"
- "\346\377\300\302\276\377\205oqm\377\1oqm5\320\377\377\377\0\2oqm\11o"
- "qm\365\204oqm\377\1\227\233\224\377\203\305\313\300\377\7\311\317\305"
- "\377\321\325\315\377\320\325\314\377\317\324\312\377\316\323\311\377"
- "\315\322\310\377\314\321\310\377\202\313\321\307\377\3\313\320\306\377"
- "\313\321\307\377\307\315\303\377\206\305\313\300\377\1\271\277\265\377"
- "\205oqm\377\1oqm=\352\377\377\377\0\12\214\216\212W\213\215\211\377\212"
- "\214\210\377\211\213\207\377\207\211\205\377\206\210\204\377\335\340"
- "\333\377\337\343\335\377\340\343\336\377\365\366\364\377\203\367\367"
- "\366\377\1\367\370\366\377\202\367\370\367\377\202\370\370\367\377\3"
- "\364\365\363\377\344\347\343\377\345\347\343\377\202\345\350\344\377"
- "\6\346\350\345\377\346\351\345\377\347\351\345\377\347\351\346\377\350"
- "\352\346\377\252\254\250\377\204oqm\377\1oqm\347\322\377\377\377\0\1"
- "oqm\276\204oqm\377\1\211\214\206\377\203\305\313\300\377\10\312\317\305"
- "\377\321\326\315\377\320\325\314\377\317\324\313\377\316\323\312\377"
- "\315\322\311\377\315\322\310\377\314\321\310\377\202\314\321\307\377"
- "\2\314\321\310\377\310\315\303\377\206\305\313\300\377\1\304\312\277"
- "\377\205oqm\377\1oqmY\352\377\377\377\0\11\213\215\211d\212\214\210\377"
- "\210\212\206\377\207\211\205\377\206\210\204\377\211\213\207\377\337"
- "\343\335\377\340\343\336\377\341\343\337\377\203\366\367\366\377\202"
- "\367\370\366\377\203\367\370\367\377\3\370\370\367\377\364\365\363\377"
- "\345\347\343\377\202\345\350\344\377\7\346\350\345\377\346\351\345\377"
- "\347\351\345\377\347\351\346\377\347\352\346\377\350\352\347\377\224"
- "\226\223\377\204oqm\377\1oqm\270\322\377\377\377\0\1oqm\223\204oqm\377"
- "\1z}x\377\203\305\313\300\377\7\312\317\305\377\322\326\316\377\321\325"
- "\315\377\317\324\313\377\317\324\312\377\316\323\312\377\315\322\311"
- "\377\204\315\322\310\377\1\310\315\303\377\207\305\313\300\377\1suq\377"
- "\204oqm\377\1oqmd\352\377\377\377\0\6\211\213\207n\210\212\206\377\207"
- "\211\205\377\206\210\204\377\205\207\203\377\213\215\211\377\202\340"
- "\343\336\377\2\342\346\341\377\366\367\365\377\202\366\367\366\377\1"
- "\367\367\366\377\202\367\370\366\377\203\367\370\367\377\1\364\365\363"
- "\377\202\345\350\344\377\5\346\350\344\377\346\351\345\377\347\351\345"
- "\377\347\351\346\377\347\352\346\377\202\350\352\347\377\1\177\201}\377"
- "\204oqm\377\1oqm\213\322\377\377\377\0\1oqmh\205oqm\377\1\301\307\274"
- "\377\202\305\313\300\377\10\312\317\305\377\322\327\316\377\321\326\315"
- "\377\320\325\314\377\317\324\313\377\317\324\312\377\316\323\312\377"
- "\315\323\311\377\202\315\322\311\377\2\315\323\311\377\310\316\303\377"
- "\207\305\313\300\377\1wyt\377\204oqm\377\1oqmo\352\377\377\377\0\12\210"
- "\212\206y\207\211\205\377\206\210\204\377\204\206\202\377\203\205\201"
- "\377\217\221\215\377\340\343\336\377\340\344\337\377\345\350\343\377"
- "\366\367\365\377\203\366\367\366\377\202\367\370\366\377\202\367\370"
- "\367\377\10\370\370\367\377\364\365\363\377\345\350\344\377\346\350\344"
- "\377\346\351\345\377\347\351\345\377\347\351\346\377\347\352\346\377"
- "\202\350\352\347\377\1\343\345\342\377\205oqm\377\1oqm_\322\377\377\377"
- "\0\1oqm<\205oqm\377\1\263\271\257\377\202\305\313\300\377\7\312\320\305"
- "\377\322\327\317\377\322\326\316\377\321\325\315\377\320\325\314\377"
- "\317\324\313\377\317\324\312\377\204\316\323\312\377\1\310\316\303\377"
- "\207\305\313\300\377\1z}x\377\204oqm\377\1oqmy\352\377\377\377\0\11\207"
- "\211\205\203\205\207\203\377\204\206\202\377\203\205\201\377\202\204"
- "\200\377\222\224\220\377\340\343\336\377\341\344\337\377\347\351\345"
- "\377\202\366\367\365\377\1\366\367\366\377\202\367\367\366\377\1\367"
- "\370\366\377\203\367\370\367\377\6\364\365\363\377\346\350\344\377\346"
- "\351\345\377\347\351\345\377\347\351\346\377\347\352\346\377\202\350"
- "\352\347\377\2\351\353\347\377\316\320\315\377\205oqm\377\1oqm2\322\377"
- "\377\377\0\1oqm\21\205oqm\377\1\245\251\241\377\202\305\313\300\377\4"
- "\312\320\306\377\323\327\317\377\322\327\316\377\321\326\315\377\202"
- "\320\325\314\377\203\317\324\313\377\3\317\324\312\377\317\324\313\377"
- "\310\316\304\377\207\305\313\300\377\1\177\201|\377\204oqm\377\1oqm\204"
- "\352\377\377\377\0\6\205\207\203\216\204\206\202\377\203\205\201\377"
- "\202\204\200\377\200\202~\377\225\227\223\377\202\341\344\337\377\2\351"
- "\354\350\377\366\367\365\377\203\366\367\366\377\2\367\367\366\377\367"
- "\370\366\377\203\367\370\367\377\5\364\365\363\377\346\350\345\377\346"
- "\351\345\377\347\351\346\377\347\352\346\377\202\350\352\347\377\3\350"
- "\353\347\377\351\353\350\377\271\273\267\377\204oqm\377\2oqm\374oqm\10"
- "\323\377\377\377\0\1oqm\346\204oqm\377\1\226\232\223\377\202\305\313"
- "\300\377\5\312\320\306\377\324\330\320\377\323\327\317\377\322\326\316"
- "\377\321\326\315\377\203\320\325\314\377\203\317\324\313\377\1\311\316"
- "\304\377\207\305\313\300\377\1\203\205\200\377\204oqm\377\1oqm\216\352"
- "\377\377\377\0\11\204\206\202\230\203\205\201\377\201\203\177\377\200"
- "\202~\377\177\201}\377\231\233\227\377\341\344\337\377\341\344\340\377"
- "\353\355\352\377\202\366\367\365\377\202\366\367\366\377\202\367\367"
- "\366\377\1\367\370\366\377\202\367\370\367\377\4\364\365\363\377\346"
- "\351\345\377\347\351\346\377\347\352\346\377\202\350\352\347\377\1\350"
- "\353\347\377\202\351\353\350\377\1\243\245\241\377\204oqm\377\1oqm\330"
- "\324\377\377\377\0\1oqm\273\204oqm\377\1\210\213\205\377\202\305\313"
- "\300\377\7\312\320\306\377\324\330\320\377\323\330\317\377\322\327\317"
- "\377\322\326\316\377\321\326\315\377\321\325\315\377\204\320\325\314"
- "\377\1\311\317\304\377\207\305\313\300\377\1\206\211\203\377\204oqm\377"
- "\1oqm\230\352\377\377\377\0\12\202\204\200\243\201\203\177\377\200\202"
- "~\377\177\201}\377}\177{\377\234\236\232\377\341\344\340\377\342\345"
- "\340\377\355\357\354\377\366\367\365\377\204\366\367\366\377\1\367\367"
- "\366\377\202\367\370\366\377\2\367\370\367\377\364\365\363\377\202\347"
- "\351\346\377\3\350\352\346\377\350\352\347\377\350\353\347\377\203\351"
- "\353\350\377\1\227\231\225\377\204oqm\377\1oqm\256\324\377\377\377\0"
- "\1oqm\223\204oqm\377\1\200\203~\377\202\305\313\300\377\6\313\320\306"
- "\377\324\331\321\377\324\330\320\377\323\327\317\377\322\327\317\377"
- "\322\326\316\377\205\321\326\315\377\1\311\317\305\377\207\305\313\300"
- "\377\1\212\216\207\377\204oqm\377\1oqm\243\352\377\377\377\0\11\201\203"
- "\177\250\200\202~\377~\200|\377}\177{\377|~z\377\236\240\234\377\342"
- "\345\340\377\342\345\341\377\357\361\356\377\203\366\367\365\377\2\366"
- "\367\366\377\367\367\366\377\202\367\370\366\377\202\367\370\367\377"
- "\5\364\365\363\377\347\351\346\377\350\352\346\377\350\352\347\377\350"
- "\353\347\377\204\351\353\350\377\1\221\223\217\377\204oqm\377\1oqm\235"
- "\324\377\377\377\0\1oqm\204\204oqm\377\1|\177z\377\202\305\313\300\377"
- "\7\313\320\306\377\325\331\322\377\324\331\321\377\324\330\320\377\323"
- "\327\317\377\322\327\317\377\322\327\316\377\204\322\326\316\377\1\311"
- "\317\305\377\207\305\313\300\377\1\214\220\211\377\204oqm\377\1oqm\250"
- "\352\377\377\377\0\13\177\201}\250~\200|\377}\177{\377|~z\377{}y\377"
- "\235\237\233\377\342\345\340\377\343\345\341\377\360\361\357\377\365"
- "\366\365\377\366\367\365\377\204\366\367\366\377\1\367\367\366\377\202"
- "\367\370\366\377\2\364\365\364\377\347\352\346\377\202\350\352\347\377"
- "\204\351\353\350\377\2\350\353\347\377\213\215\211\377\204oqm\377\1o"
- "qm\221\324\377\377\377\0\1oqmx\204oqm\377\1y{v\377\202\305\313\300\377"
- "\7\313\320\307\377\326\332\322\377\325\331\321\377\324\331\321\377\324"
- "\330\320\377\323\330\317\377\323\327\317\377\202\322\327\317\377\3\322"
- "\327\316\377\322\327\317\377\312\317\305\377\207\305\313\300\377\1\214"
- "\220\211\377\204oqm\377\1oqm\250\352\377\377\377\0\11~\200|\250}\177"
- "{\377|~z\377z|x\377y{w\377\234\237\232\377\343\345\341\377\343\346\341"
- "\377\360\361\357\377\203\366\367\365\377\202\366\367\366\377\1\367\367"
- "\366\377\202\367\370\366\377\2\367\370\367\377\364\365\364\377\202\350"
- "\352\347\377\202\351\353\350\377\5\352\354\351\377\351\353\350\377\351"
- "\353\347\377\350\352\347\377\205\207\203\377\204oqm\377\1oqm\205\324"
- "\377\377\377\0\1oqmm\204oqm\377\1uws\377\202\305\313\300\377\5\313\321"
- "\307\377\326\332\323\377\326\332\322\377\325\331\321\377\324\331\321"
- "\377\202\324\330\320\377\204\323\330\317\377\1\312\317\305\377\207\305"
- "\313\300\377\1\214\220\211\377\204oqm\377\1oqm\250\352\377\377\377\0"
- "\12}\177{\250{}y\377z|x\377y{w\377xzv\377\234\236\232\377\343\346\341"
- "\377\343\346\342\377\360\361\357\377\365\366\365\377\202\366\367\365"
- "\377\203\366\367\366\377\202\367\367\366\377\3\367\370\366\377\364\365"
- "\364\377\350\352\347\377\205\351\353\350\377\3\350\352\347\377\350\352"
- "\346\377\177\201}\377\204oqm\377\1oqmz\324\377\377\377\0\1oqma\204oq"
- "m\377\1qso\377\202\305\313\300\377\5\313\321\307\377\327\333\324\377"
- "\326\332\323\377\326\332\322\377\325\331\321\377\202\324\331\321\377"
- "\204\324\330\320\377\1\312\320\306\377\207\305\313\300\377\1\214\220"
- "\211\377\204oqm\377\1oqm\250\352\377\377\377\0\13{}y\250z|x\377y{w\377"
- "xzv\377vxt\377\233\235\231\377\343\346\342\377\344\346\342\377\360\362"
- "\357\377\365\366\365\377\366\366\365\377\202\366\367\365\377\1\366\367"
- "\366\377\202\367\367\366\377\4\367\370\366\377\367\370\367\377\364\365"
- "\364\377\351\353\347\377\204\351\353\350\377\4\350\352\347\377\350\352"
- "\346\377\347\352\346\377y{w\377\204oqm\377\1oqmn\324\377\377\377\0\1"
- "oqmU\205oqm\377\10\304\312\277\377\305\313\300\377\314\321\307\377\327"
- "\334\324\377\327\333\323\377\326\332\323\377\326\332\322\377\325\331"
- "\322\377\202\325\331\321\377\203\324\331\321\377\1\312\320\306\377\207"
- "\305\313\300\377\1\214\220\211\377\204oqm\377\1oqm\250\352\377\377\377"
- "\0\14z|x\250y{w\377wyu\377vxt\377uws\377\232\234\230\377\344\346\342"
- "\377\344\347\343\377\360\361\357\377\365\366\365\377\365\367\365\377"
- "\366\367\365\377\203\366\367\366\377\1\366\370\366\377\202\367\370\366"
- "\377\1\365\366\364\377\204\351\353\350\377\202\350\352\347\377\3\347"
- "\352\346\377\347\351\346\377tvr\377\204oqm\377\1oqmc\324\377\377\377"
- "\0\1oqmJ\205oqm\377\7\301\306\274\377\305\313\300\377\314\321\307\377"
***The diff for this file has been truncated for email.***
=======================================
--- /shacrypt.1 Sun Nov 15 07:19:23 2009
+++ /dev/null
@@ -1,75 +0,0 @@
-.\" Copyright (C) 2009
-.\" LlamaSlayers
-.\"
-.\" This document is dual-licensed. You may distribute and/or modify it
-.\" under the terms of either of the following licenses:
-.\"
-.\" * The GNU General Public License, as published by the Free Software
-.\" Foundation, version 3 or (at your option) any later version. You
-.\" should have received a copy of the GNU General Public License
-.\" along with this program. If not, see
-.\" <http://www.gnu.org/licenses/>.
-.\"
-.\" * The GNU Free Documentation License, as published by the Free
-.\" Software Foundation, version 1.3 or (at your option) any later
-.\" version, with no Invariant Sections, no Front-Cover Texts, and no
-.\" Back-Cover Texts. You should have received a copy of the GNU Free
-.\" Documentation License along with this program. If not, see
-.\" <http://www.gnu.org/licenses/>.
-.\"
-.TH SHACRYPT 1 "version 1.2.1" "November 15, 2009"
-.\" Please adjust this date whenever revising the manpage.
-.\"
-
-.SH NAME
-SHACrypt \- SHA1 enCRYPTion program
-
-.SH SYNOPSIS
-.B shacrypt
-.I command[args] password [file.in file.out]
-.br
-
-.SH DESCRIPTION
-This manual page briefly documents the \fBshacrypt\fP command.
-.PP
-\fBSHACrypt\fP is a small console application that allows users to encrypt
-files using cryptographic hash functions as a cypher. It supports
asymmetric
-encryption, but not public key encryption.
-
-.SH OPTIONS
-.TP
-.B a
-Preform asymmetric encryption \- the file must be a valid SHACrypt 1.1 or
-higher file. This feature was introduced in version 1.1.1. The only
difference
-between asymmetric encryption in 1.1.1+ and normal encryption in 1.0.x is
-the file header. The asymmetric option should be used when the decrypted
-version of the file cannot be transmitted and the password must be kept
secret.
-.TP
-.B c
-Compatibility (pre-1.1) mode \- the file will have no header and no random
-seed. This mode must be used to decrypt SHACrypt 1.0.x files or make files
-that are readable by SHACrypt 1.0.x.
-.TP
-.B d
-Decrypt a file that is in a 1.1+ format. This must be used for files from
-1.1.x or higher, and will provide backwards compatibility if the file
format
-is ever changed again.
-.TP
-.B e
-Encrypt a file using the newest (1.2+) format. This is considerably more
secure
-than compatibility mode, but will add at least 22 bytes to the filesize.
-.TP
-.B h
-Display help about the usage of SHACrypt. No arguments are needed.
-.TP
-.B ha
-Display help about asymmetric encryption. No arguments are needed.
-.TP
-.B he
-Display help about advanced encryption. No arguments are needed.
-
-.SH BUGS
-Please send any comments or bug reports to \fBsha...@googlegroups.com\fP.
-
-.SH HOMEPAGE
-http://shacrypt.googlecode.com/
=======================================
--- /shacrypt.c Sun Nov 8 16:35:39 2009
+++ /dev/null
@@ -1,307 +0,0 @@
-/**
- * SHACrypt main code
- *
- * SHACrypt - Encrypt files using cryptographic hash functions
- * Copyright (C) 2009 LlamaSlayers
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * 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, see <http://www.gnu.org/licenses/>.
- *
- * @since 1.1.2
- * @version 1.2
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include "shacrypt.h"
-
-#include "third-party/sha1.h"
-#include "third-party/sha2.h"
-#include "third-party/md5.h"
-#include "third-party/cubehash.h"
-#include "third-party/nessie.h"
-
-#ifdef WINDOWS
-#include <windows.h>
-#include <wincrypt.h>
-#endif
-
-int SHACrypt_XOR( char* in1, char* in2, char* out, int len ) {
- int i = 0;
-
- for ( i = 0; i < len; i++ ) {
- out[i] = (char)(in1[i] ^ in2[i]);
- }
-
- return 0;
-}
-
-int SHACrypt_GenKey( char* oldkey, char* newkey, char* password ) {
- int status = 0;
- SHA1Context sha;
-
- status = SHA1Reset( &sha );
- if ( status )
- return status;
-
- status = SHA1Input( &sha, (unsigned char*)oldkey, sizeof( oldkey ) );
- if ( status )
- return status;
-
- status = SHA1Input( &sha, (unsigned char*)password, sizeof( password )
);
- if ( status )
- return status;
-
- status = SHA1Result( &sha, (unsigned char*)newkey );
-
- return status;
-}
-
-int SHACrypt_GenRand( char* data, int len ) {
- FILE* rnd = fopen( "/dev/urandom", "rb" );
- int i;
-
-#ifdef WINDOWS
- HCRYPTPROV hCryptProv;
- BYTE pbData[len];
-
- if ( CryptAcquireContext( &hCryptProv, NULL, NULL, PROV_RSA_FULL, 0 )
) {
- if ( CryptGenRandom( hCryptProv, (DWORD)len, pbData ) ) {
- for ( i = 0; i < len; i++ ) {
- data[i] = (char)pbData[i];
- }
- return 0;
- }
- CryptReleaseContext( hCryptProv, 0 );
- }
-#endif
-
- if ( rnd ) {
- fread( data, 1, len, rnd );
- fclose( rnd );
- return 0;
- }
- free( rnd );
-
- srand( time( NULL ) );
- for ( i = 0; i < 50; i++ ) { // Pseudo-entropy
- srand( rand() );
- }
-
- for ( i = 0; i < len; i++ ) {
- data[i] = (char)(rand() % 256);
- }
-
- return 1;
-}
-
-int SHACrypt_GetLength( unsigned char algos ) {
- if ( algos & '\xD0' )
- return 64;
- if ( algos & '\x08' )
- return 48;
- if ( algos & '\x04' )
- return 32;
- if ( algos & '\x02' )
- return 28;
- if ( algos & '\x01' )
- return 20;
- if ( algos & '\x20' )
- return 16;
- return 0;
-}
-
-int SHACrypt_GetRand( unsigned char algos, char* rand ) {
- int len = SHACrypt_GetLength( algos );
- return SHACrypt_GenRand( rand, len ) ? -len : len;
-}
-
-void SHACrypt_Init( struct SHACrypt_Context* ctx, unsigned char* password,
unsigned int passlen,
- unsigned char algos, unsigned char* rand, unsigned
char randlen ) {
- ctx->algos = algos;
- ctx->password = password;
- ctx->passlen = passlen;
-
- if ( algos & '\x01' ) {
- ctx->sha1_ptr = 0;
- SHA1Reset( &ctx->sha1 );
- SHA1Input( &ctx->sha1, rand, randlen );
- SHA1Input( &ctx->sha1, password, passlen );
- SHA1Result( &ctx->sha1, ctx->sha1_res );
- }
-
- if ( algos & '\x02' ) {
- ctx->sha224_ptr = 0;
- sha224_init( &ctx->sha224 );
- sha224_update( &ctx->sha224, rand, randlen );
- sha224_update( &ctx->sha224, password, passlen );
- sha224_final( &ctx->sha224, ctx->sha224_res );
- }
-
- if ( algos & '\x04' ) {
- ctx->sha256_ptr = 0;
- sha256_init( &ctx->sha256 );
- sha256_update( &ctx->sha256, rand, randlen );
- sha256_update( &ctx->sha256, password, passlen );
- sha256_final( &ctx->sha256, ctx->sha256_res );
- }
-
- if ( algos & '\x08' ) {
- ctx->sha384_ptr = 0;
- sha384_init( &ctx->sha384 );
- sha384_update( &ctx->sha384, rand, randlen );
- sha384_update( &ctx->sha384, password, passlen );
- sha384_final( &ctx->sha384, ctx->sha384_res );
- }
-
- if ( algos & '\x10' ) {
- ctx->sha512_ptr = 0;
- sha512_init( &ctx->sha512 );
- sha512_update( &ctx->sha512, rand, randlen );
- sha512_update( &ctx->sha512, password, passlen );
- sha512_final( &ctx->sha512, ctx->sha512_res );
- }
-
- if ( algos & '\x20' ) {
- ctx->md5_ptr = 0;
- MD5Init( &ctx->md5 );
- MD5Update( &ctx->md5, rand, randlen );
- MD5Update( &ctx->md5, password, passlen );
- MD5Final( ctx->md5_res, &ctx->md5 );
- }
-
- if ( algos & '\x40' ) {
- ctx->cube_ptr = 0;
- CubeHash_Init( &ctx->cube, 512 );
- CubeHash_Update( &ctx->cube, rand, randlen * 8 );
- CubeHash_Update( &ctx->cube, password, passlen * 8 );
- CubeHash_Final( &ctx->cube, ctx->cube_res );
- }
-
- if ( algos & '\x80' ) {
- ctx->whirlpool_ptr = 0;
- NESSIEinit( &ctx->whirlpool );
- NESSIEadd( rand, randlen * 8, &ctx->whirlpool );
- NESSIEadd( password, passlen * 8, &ctx->whirlpool );
- NESSIEfinalize( &ctx->whirlpool, ctx->whirlpool_res );
- }
-}
-
-void SHACrypt_Process( SHACrypt_Context* ctx, char* in, char* out,
unsigned int len ) {
- int i;
- char c;
-
- for ( i = 0; i < len; i++ ) {
- c = in[i];
-
- if ( ctx->algos & '\x01' ) {
- if ( ctx->sha1_ptr > 19 ) {
- ctx->sha1_ptr = 0;
- SHA1Reset( &ctx->sha1 );
- SHA1Input( &ctx->sha1, ctx->sha1_res, 20 );
- SHA1Input( &ctx->sha1, ctx->password, ctx->passlen );
- SHA1Result( &ctx->sha1, ctx->sha1_res );
- }
- c ^= ctx->sha1_res[ctx->sha1_ptr];
- ctx->sha1_ptr++;
- }
-
- if ( ctx->algos & '\x02' ) {
- if ( ctx->sha224_ptr > 27 ) {
- ctx->sha224_ptr = 0;
- sha224_init( &ctx->sha224 );
- sha224_update( &ctx->sha224, ctx->sha224_res, 28 );
- sha224_update( &ctx->sha224, ctx->password, ctx->passlen );
- sha224_final( &ctx->sha224, ctx->sha224_res );
- }
- c ^= ctx->sha224_res[ctx->sha224_ptr];
- ctx->sha224_ptr++;
- }
-
- if ( ctx->algos & '\x04' ) {
- if ( ctx->sha256_ptr > 31 ) {
- ctx->sha256_ptr = 0;
- sha256_init( &ctx->sha256 );
- sha256_update( &ctx->sha256, ctx->sha256_res, 32 );
- sha256_update( &ctx->sha256, ctx->password, ctx->passlen );
- sha256_final( &ctx->sha256, ctx->sha256_res );
- }
- c ^= ctx->sha256_res[ctx->sha256_ptr];
- ctx->sha256_ptr++;
- }
-
- if ( ctx->algos & '\x08' ) {
- if ( ctx->sha384_ptr > 47 ) {
- ctx->sha384_ptr = 0;
- sha384_init( &ctx->sha384 );
- sha384_update( &ctx->sha384, ctx->sha384_res, 48 );
- sha384_update( &ctx->sha384, ctx->password, ctx->passlen );
- sha384_final( &ctx->sha384, ctx->sha384_res );
- }
- c ^= ctx->sha384_res[ctx->sha384_ptr];
- ctx->sha384_ptr++;
- }
-
- if ( ctx->algos & '\x10' ) {
- if ( ctx->sha512_ptr > 63 ) {
- ctx->sha512_ptr = 0;
- sha512_init( &ctx->sha512 );
- sha512_update( &ctx->sha512, ctx->sha512_res, 64 );
- sha512_update( &ctx->sha512, ctx->password, ctx->passlen );
- sha512_final( &ctx->sha512, ctx->sha512_res );
- }
- c ^= ctx->sha512_res[ctx->sha512_ptr];
- ctx->sha512_ptr++;
- }
-
- if ( ctx->algos & '\x20' ) {
- if ( ctx->md5_ptr > 15 ) {
- ctx->md5_ptr = 0;
- MD5Init( &ctx->md5 );
- MD5Update( &ctx->md5, ctx->md5_res, 16 );
- MD5Update( &ctx->md5, ctx->password, ctx->passlen );
- MD5Final( ctx->md5_res, &ctx->md5 );
- }
- c ^= ctx->md5_res[ctx->md5_ptr];
- ctx->md5_ptr++;
- }
-
- if ( ctx->algos & '\x40' ) {
- if ( ctx->cube_ptr > 63 ) {
- ctx->cube_ptr = 0;
- CubeHash_Init( &ctx->cube, 512 );
- CubeHash_Update( &ctx->cube, ctx->cube_res, 512 );
- CubeHash_Update( &ctx->cube, ctx->password, ctx->passlen *
8 );
- CubeHash_Final( &ctx->cube, ctx->cube_res );
- }
- c ^= ctx->cube_res[ctx->cube_ptr];
- ctx->cube_ptr++;
- }
-
- if ( ctx->algos & '\x80' ) {
- if ( ctx->whirlpool_ptr > 63 ) {
- ctx->whirlpool_ptr = 0;
- NESSIEinit( &ctx->whirlpool );
- NESSIEadd( ctx->whirlpool_res, 512, &ctx->whirlpool );
- NESSIEadd( ctx->password, ctx->passlen * 8,
&ctx->whirlpool );
- NESSIEfinalize( &ctx->whirlpool, ctx->whirlpool_res );
- }
- c ^= ctx->whirlpool_res[ctx->whirlpool_ptr];
- ctx->whirlpool_ptr++;
- }
-
- out[i] = c;
- }
-}
=======================================
--- /shacrypt.glade Sun Feb 21 11:21:39 2010
+++ /dev/null
@@ -1,1284 +0,0 @@
-<?xml version="1.0"?>
-<interface>
- <requires lib="gtk+" version="2.16"/>
- <!-- interface-naming-policy project-wide -->
- <object class="GtkDialog" id="main">
- <property name="border_width">5</property>
- <property name="title" translatable="yes">SHACrypt</property>
- <property name="resizable">False</property>
- <property name="type_hint">dialog</property>
- <property name="has_separator">False</property>
- <signal name="destroy" handler="gtk_main_quit"/>
- <child internal-child="vbox">
- <object class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">2</property>
- <child>
- <object class="GtkVBox" id="vbox1">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkLabel" id="label_welcome">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Welcome to
-SHACrypt @VERSION@</property>
- <property name="justify">center</property>
- <attributes>
- <attribute name="size" value="25000"/>
- </attributes>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label_select_an_action">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Please select an
action.</property>
- <attributes>
- <attribute name="size" value="15000"/>
- </attributes>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <object class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="homogeneous">True</property>
- <property name="layout_style">center</property>
- <child>
- <object class="GtkButton" id="button_encrypt">
- <property name="label"
translatable="yes">_Encrypt</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_underline">True</property>
- <accelerator key="e" signal="clicked"/>
- <signal name="clicked" handler="button_pressed_encrypt"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="button_decrypt">
- <property name="label"
translatable="yes">_Decrypt</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_underline">True</property>
- <accelerator key="d" signal="clicked"/>
- <signal name="clicked" handler="button_pressed_decrypt"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="button_asymmetric">
- <property name="label"
translatable="yes">_Asymmetric</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_underline">True</property>
- <accelerator key="a" signal="clicked"/>
- <signal name="clicked"
handler="button_pressed_asymmetric"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="0">button_encrypt</action-widget>
- <action-widget response="0">button_decrypt</action-widget>
- <action-widget response="0">button_asymmetric</action-widget>
- </action-widgets>
- </object>
- <object class="GtkDialog" id="encrypt_step1">
- <property name="border_width">5</property>
- <property name="title" translatable="yes">Encrypt a file (Step 1 of
3)</property>
- <property name="modal">True</property>
- <property name="window_position">center-on-parent</property>
- <property name="default_width">500</property>
- <property name="default_height">400</property>
- <property name="type_hint">dialog</property>
- <property name="transient_for">main</property>
- <property name="has_separator">False</property>
- <signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
- <child internal-child="vbox">
- <object class="GtkVBox" id="dialog-vbox4">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">2</property>
- <child>
- <object class="GtkFileChooserWidget" id="file_e1_select">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="preview_widget_active">False</property>
- <signal name="file_activated" handler="encrypt_step1_ok"/>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label_e1_description">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Select a file to
encrypt.</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="padding">15</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <object class="GtkHButtonBox" id="dialog-action_area4">
- <property name="visible">True</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="button_e1_cancel">
- <property name="label">gtk-cancel</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_stock">True</property>
- <signal name="clicked" handler="encrypt_step1_cancel"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="button_e1_ok">
- <property name="label">gtk-ok</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_stock">True</property>
- <signal name="clicked" handler="encrypt_step1_ok"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="0">button_e1_cancel</action-widget>
- <action-widget response="0">button_e1_ok</action-widget>
- </action-widgets>
- </object>
- <object class="GtkDialog" id="encrypt_step2">
- <property name="border_width">5</property>
- <property name="title" translatable="yes">Encrypt a file (Step 2 of
3)</property>
- <property name="modal">True</property>
- <property name="window_position">center-on-parent</property>
- <property name="type_hint">dialog</property>
- <property name="transient_for">encrypt_step1</property>
- <property name="has_separator">False</property>
- <signal name="delete_event" handler="encrypt_step2_cancel"/>
- <signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
- <child internal-child="vbox">
- <object class="GtkVBox" id="dialog-vbox3">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">2</property>
- <child>
- <object class="GtkNotebook" id="notebook_e2_tabs">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <child>
- <object class="GtkVBox" id="vbox3">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkTable" id="table1">
- <property name="visible">True</property>
- <property name="n_rows">2</property>
- <property name="n_columns">2</property>
- <child>
- <object class="GtkEntry" id="field_e2_password1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="visibility">False</property>
- <property name="invisible_char">●</property>
- <property name="activates_default">True</property>
- <property name="invisible_char_set">True</property>
- <signal name="changed"
handler="encrypt_step2_passchange"/>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label_e2_password2">
- <property name="visible">True</property>
- <property name="xpad">5</property>
- <property name="ypad">5</property>
- <property name="label"
translatable="yes">(again)</property>
- </object>
- <packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="y_options">GTK_SHRINK</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="field_e2_password2">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="visibility">False</property>
- <property name="invisible_char">●</property>
- <property name="invisible_char_set">True</property>
- <signal name="changed"
handler="encrypt_step2_passchange"/>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label_e2_password1">
- <property name="visible">True</property>
- <property name="xpad">5</property>
- <property name="ypad">5</property>
- <property name="label"
translatable="yes">Password</property>
- </object>
- <packing>
- <property name="y_options"></property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="padding">2</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkProgressBar"
id="progressbar_e2_pass_strength">
- <property name="visible">True</property>
- <property name="show_text">True</property>
- <property name="text" translatable="yes">Enter a
password</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="label_e2_basic">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Basic</property>
- </object>
- <packing>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- <child>
- <object class="GtkVBox" id="vbox4">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <child>
- <object class="GtkFrame" id="frame_e2_hashalgo">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
- <child>
- <object class="GtkAlignment" id="alignment1">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkTable" id="table2">
- <property name="visible">True</property>
- <property name="n_rows">4</property>
- <property name="n_columns">2</property>
- <child>
- <object class="GtkCheckButton"
id="check_e2_sha1">
- <property name="label"
translatable="yes">SHA1</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property
name="receives_default">False</property>
- <property name="active">True</property>
- <property
name="draw_indicator">True</property>
- <signal name="toggled"
handler="encrypt_step2_check_hashalgo"/>
- </object>
- </child>
- <child>
- <object class="GtkCheckButton"
id="check_e2_sha224">
- <property name="label"
translatable="yes">SHA224</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property
name="receives_default">False</property>
- <property
name="draw_indicator">True</property>
- <signal name="toggled"
handler="encrypt_step2_check_hashalgo"/>
- </object>
- <packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton"
id="check_e2_sha256">
- <property name="label"
translatable="yes">SHA256</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property
name="receives_default">False</property>
- <property
name="draw_indicator">True</property>
- <signal name="toggled"
handler="encrypt_step2_check_hashalgo"/>
- </object>
- <packing>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton"
id="check_e2_sha384">
- <property name="label"
translatable="yes">SHA384</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property
name="receives_default">False</property>
- <property
name="draw_indicator">True</property>
- <signal name="toggled"
handler="encrypt_step2_check_hashalgo"/>
- </object>
- <packing>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton"
id="check_e2_sha512">
- <property name="label"
translatable="yes">SHA512</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property
name="receives_default">False</property>
- <property
name="draw_indicator">True</property>
- <signal name="toggled"
handler="encrypt_step2_check_hashalgo"/>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton"
id="check_e2_md5">
- <property name="label"
translatable="yes">MD5</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property
name="receives_default">False</property>
- <property
name="draw_indicator">True</property>
- <signal name="toggled"
handler="encrypt_step2_check_hashalgo"/>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton"
id="check_e2_cubehash">
- <property name="label"
translatable="yes">CubeHash</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property
name="receives_default">False</property>
- <property
name="draw_indicator">True</property>
- <signal name="toggled"
handler="encrypt_step2_check_hashalgo"/>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- </packing>
- </child>
- <child>
- <object class="GtkCheckButton"
id="check_e2_whirlpool">
- <property name="label"
translatable="yes">WHIRLPOOL</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property
name="receives_default">False</property>
- <property
name="draw_indicator">True</property>
- <signal name="toggled"
handler="encrypt_step2_check_hashalgo"/>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel" id="label_e2_hashalgo">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Hash
Algorithms</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkFrame" id="frame_e2_randomseed">
- <property name="visible">True</property>
- <property name="label_xalign">0</property>
- <property name="shadow_type">none</property>
- <child>
- <object class="GtkAlignment" id="alignment2">
- <property name="visible">True</property>
- <property name="left_padding">12</property>
- <child>
- <object class="GtkVBox" id="vbox5">
- <property name="visible">True</property>
- <property
name="orientation">vertical</property>
- <child>
- <object class="GtkRadioButton"
id="radio_e2_randomseed_off">
- <property name="label"
translatable="yes">Select one based on my other choices</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property
name="receives_default">False</property>
- <property
name="draw_indicator">True</property>
- <signal name="toggled"
handler="encrypt_step2_check_hashalgo"/>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox1">
- <property name="visible">True</property>
- <child>
- <object class="GtkRadioButton"
id="radio_e2_randomseed_on">
- <property name="label"
translatable="yes">Use this number of bytes:</property>
- <property
name="visible">True</property>
- <property
name="can_focus">True</property>
- <property
name="receives_default">False</property>
- <property
name="draw_indicator">True</property>
- <property
name="group">radio_e2_randomseed_off</property>
- <signal name="toggled"
handler="encrypt_step2_check_hashalgo"/>
- </object>
- <packing>
- <property
name="expand">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHScale"
id="hscale_e2_randomseed">
- <property
name="visible">True</property>
- <property
name="can_focus">True</property>
- <property
name="adjustment">adjustment_e2_randomseed</property>
- <property name="digits">0</property>
- <property
name="value_pos">left</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child type="label">
- <object class="GtkLabel" id="label_e2_randomseed">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Random
Seed Length</property>
- <attributes>
- <attribute name="weight" value="bold"/>
- </attributes>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="label_e2_advanced">
- <property name="visible">True</property>
- <property name="label"
translatable="yes">Advanced</property>
- </object>
- <packing>
- <property name="position">1</property>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <object class="GtkHButtonBox" id="dialog-action_area3">
- <property name="visible">True</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="button_e2_cancel">
- <property name="label">gtk-cancel</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_stock">True</property>
- <signal name="clicked" handler="encrypt_step2_cancel"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="button_e2_ok">
- <property name="label">gtk-ok</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="has_default">True</property>
- <property name="receives_default">True</property>
- <property name="use_stock">True</property>
- <accelerator key="Return" signal="clicked"/>
- <signal name="clicked" handler="encrypt_step2_ok"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="0">button_e2_cancel</action-widget>
- <action-widget response="0">button_e2_ok</action-widget>
- </action-widgets>
- </object>
- <object class="GtkWindow" id="encrypt_step3">
- <property name="border_width">5</property>
- <property name="title" translatable="yes">Encrypt a file (Step 3 of
3)</property>
- <property name="modal">True</property>
- <property name="window_position">center-on-parent</property>
- <property name="type_hint">dialog</property>
- <property name="deletable">False</property>
- <property name="transient_for">encrypt_step2</property>
- <signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
- <child>
- <object class="GtkVBox" id="vbox2">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">5</property>
- <child>
- <object class="GtkProgressBar" id="progressbar_e3_progress">
- <property name="visible">True</property>
- <property name="show_text">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label_e3_description">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Your file is now
being encrypted using the password you specified. A copy has been created,
so the original file will not be modified.</property>
- <property name="justify">center</property>
- <property name="wrap">True</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- <object class="GtkAdjustment" id="adjustment_e2_randomseed">
- <property name="value">20</property>
- <property name="lower">1</property>
- <property name="upper">256</property>
- <property name="step_increment">1</property>
- </object>
- <object class="GtkDialog" id="decrypt_step1">
- <property name="border_width">5</property>
- <property name="title" translatable="yes">Decrypt a file (Step 1 of
3)</property>
- <property name="window_position">center-on-parent</property>
- <property name="default_width">500</property>
- <property name="default_height">400</property>
- <property name="type_hint">dialog</property>
- <property name="transient_for">main</property>
- <signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
- <child internal-child="vbox">
- <object class="GtkVBox" id="dialog-vbox5">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">2</property>
- <child>
- <object class="GtkFileChooserWidget" id="file_d1_select">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="preview_widget_active">False</property>
- <property name="filter">filter_shacrypt_ext</property>
- <property name="use_preview_label">False</property>
- <signal name="file_activated" handler="decrypt_step1_ok"/>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label_d1_desc">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Select a file to
decrypt.</property>
- <property name="justify">center</property>
- <property name="wrap">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="padding">5</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <object class="GtkHButtonBox" id="dialog-action_area5">
- <property name="visible">True</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="button_d1_cancel">
- <property name="label">gtk-cancel</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_stock">True</property>
- <signal name="clicked" handler="decrypt_step1_cancel"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="button_d1_ok">
- <property name="label">gtk-ok</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_stock">True</property>
- <signal name="clicked" handler="decrypt_step1_ok"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="0">button_d1_cancel</action-widget>
- <action-widget response="0">button_d1_ok</action-widget>
- </action-widgets>
- </object>
- <object class="GtkFileFilter" id="filter_shacrypt_ext"/>
- <object class="GtkMessageDialog" id="decrypt_step1_error_notshacrypt">
- <property name="border_width">5</property>
- <property name="title" translatable="yes">Error reading file</property>
- <property name="resizable">False</property>
- <property name="modal">True</property>
- <property name="window_position">center-on-parent</property>
- <property name="type_hint">notification</property>
- <property name="skip_taskbar_hint">True</property>
- <property name="transient_for">decrypt_step1</property>
- <property name="message_type">error</property>
- <property name="text" translatable="yes">File could not be
read</property>
- <property name="secondary_text" translatable="yes">The file you
selected was not a valid SHACrypt file.
-It might be corrupted or from a newer version.</property>
- <signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
- <child internal-child="vbox">
- <object class="GtkVBox" id="dialog-vbox6">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">2</property>
- <child internal-child="action_area">
- <object class="GtkHButtonBox" id="dialog-action_area6">
- <property name="visible">True</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="button_d1b_ok">
- <property name="label">gtk-ok</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_stock">True</property>
- <signal name="clicked" handler="decrypt_step1_error_ok"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="0">button_d1b_ok</action-widget>
- </action-widgets>
- </object>
- <object class="GtkDialog" id="decrypt_step2">
- <property name="border_width">5</property>
- <property name="title" translatable="yes">Decrypt a file (Step 2 of
3)</property>
- <property name="modal">True</property>
- <property name="window_position">center-on-parent</property>
- <property name="type_hint">dialog</property>
- <property name="transient_for">decrypt_step1</property>
- <property name="has_separator">False</property>
- <signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
- <signal name="delete_event" handler="decrypt_step2_cancel"/>
- <child internal-child="vbox">
- <object class="GtkVBox" id="dialog-vbox8">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">2</property>
- <child>
- <object class="GtkNotebook" id="notebook_d2_tabs">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <child>
- <object class="GtkHBox" id="hbox2">
- <property name="visible">True</property>
- <child>
- <object class="GtkLabel" id="label_d2_password">
- <property name="visible">True</property>
- <property name="label"
translatable="yes">Password</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="field_d2_password">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="visibility">False</property>
- <property name="invisible_char">●</property>
- <property name="activates_default">True</property>
- <property name="invisible_char_set">True</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- <child type="tab">
- <object class="GtkLabel" id="label_d2_basic">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Basic</property>
- </object>
- <packing>
- <property name="tab_fill">False</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <object class="GtkHButtonBox" id="dialog-action_area8">
- <property name="visible">True</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="button_d2_cancel">
- <property name="label">gtk-cancel</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_stock">True</property>
- <signal name="clicked" handler="decrypt_step2_cancel"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="button_d2_ok">
- <property name="label">gtk-ok</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_stock">True</property>
- <signal name="clicked" handler="decrypt_step2_ok"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="0">button_d2_cancel</action-widget>
- <action-widget response="0">button_d2_ok</action-widget>
- </action-widgets>
- </object>
- <object class="GtkWindow" id="decrypt_step3">
- <property name="border_width">5</property>
- <property name="title" translatable="yes">Decrypt a file (Step 3 of
3)</property>
- <property name="modal">True</property>
- <property name="window_position">center-on-parent</property>
- <property name="type_hint">dialog</property>
- <property name="deletable">False</property>
- <property name="transient_for">decrypt_step2</property>
- <signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
- <child>
- <object class="GtkVBox" id="vbox6">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">5</property>
- <child>
- <object class="GtkProgressBar" id="progressbar_d3_progress">
- <property name="visible">True</property>
- <property name="show_text">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="label_d3_description">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Your file is now
being decrypted using the password you specified. If the password was
incorrect, the decrypted file will contain seemingly random data. The
encrypted file will not be modified.</property>
- <property name="justify">center</property>
- <property name="wrap">True</property>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- <object class="GtkDialog" id="asymmetric_step1">
- <property name="border_width">5</property>
- <property name="title" translatable="yes">Asymmetric Encryption (Step
1 of 3)</property>
- <property name="modal">True</property>
- <property name="window_position">center-on-parent</property>
- <property name="type_hint">dialog</property>
- <property name="transient_for">main</property>
- <property name="has_separator">False</property>
- <signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
- <child internal-child="vbox">
- <object class="GtkVBox" id="dialog-vbox9">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="spacing">2</property>
- <child>
- <object class="GtkFileChooserWidget" id="file_a1_select">
- <property name="visible">True</property>
- <property name="orientation">vertical</property>
- <property name="preview_widget_active">False</property>
- <property name="filter">filter_shacrypt_ext</property>
- <property name="use_preview_label">False</property>
- <signal name="file_activated" handler="asymmetric_step1_ok"/>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
- <child internal-child="action_area">
- <object class="GtkHButtonBox" id="dialog-action_area9">
- <property name="visible">True</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="button_a1_cancel">
- <property name="label">gtk-cancel</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="use_stock">True</property>
- <signal name="clicked" handler="asymmetric_step1_cancel"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
***The diff for this file has been truncated for email.***
=======================================
--- /shacrypt.h Sun Nov 8 18:50:54 2009
+++ /dev/null
@@ -1,80 +0,0 @@
-/**
- * SHACrypt header
- *
- * SHACrypt - Encrypt files using cryptographic hash functions
- * Copyright (C) 2009 LlamaSlayers
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * 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, see <http://www.gnu.org/licenses/>.
- *
- * @since 1.1.2
- * @version 1.2
- */
-
-#ifndef _SHACRYPT_H_
-#define _SHACRYPT_H_
-// Legacy methods
-int SHACrypt_XOR( char* in1, char* in2, char* out, int len );
-int SHACrypt_GenKey( char* oldkey, char* newkey, char* password );
-int SHACrypt_GenRand( char* data, int len );
-
-// Methods added in the MultiHash branch
-#include "third-party/sha1.h"
-#include "third-party/sha2.h"
-#include "third-party/md5.h"
-#include "third-party/cubehash.h"
-#include "third-party/nessie.h"
-
-typedef struct SHACrypt_Context {
- // Hash contexts
- SHA1Context sha1;
- sha224_ctx sha224;
- sha256_ctx sha256;
- sha384_ctx sha384;
- sha512_ctx sha512;
- MD5_CTX md5;
- CubeHash_hashState cube;
- NESSIEstruct whirlpool;
-
- // Hash results
- unsigned char sha1_res[20],
- sha224_res[28],
- sha256_res[32],
- sha384_res[48],
- sha512_res[64],
- md5_res[16],
- cube_res[64],
- whirlpool_res[64];
-
- // Hash result pointers
- unsigned char sha1_ptr,
- sha224_ptr,
- sha256_ptr,
- sha384_ptr,
- sha512_ptr,
- md5_ptr,
- cube_ptr,
- whirlpool_ptr;
-
- // Other variables
- unsigned char algos;
- unsigned char* password;
- unsigned int passlen;
-} SHACrypt_Context;
-
-int SHACrypt_GetLength( unsigned char algos );
-int SHACrypt_GetRand( unsigned char algos, char* rand );
-void SHACrypt_Init( SHACrypt_Context* ctx, unsigned char* password,
unsigned int passlen,
- unsigned char algos, unsigned char* rand, unsigned
char randlen );
-void SHACrypt_Process( SHACrypt_Context* ctx, char* in, char* out,
unsigned int len );
-#endif
=======================================
--- /test-helper.c Sun Feb 21 11:21:39 2010
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * SHACrypt test helper - Generates random data
- *
- * SHACrypt - Encrypt files using cryptographic hash functions
- * Copyright (C) 2009-10 LlamaSlayers
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * 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, see <http://www.gnu.org/licenses/>.
- *
- * @since 1.2.2
- * @version 1.2.2
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "shacrypt.h"
-
-int main( int argc, char **argv ) {
- FILE *rand = fopen( argv[1], "wb" );
- char data[1024] = {0};
- SHACrypt_GenRand( data, 1024 );
- fwrite( "\0", 1, 1, rand );
- fwrite( data, 1, 1000, rand );
- fclose( rand );
-
- return 0;
-}
=======================================
--- /third-party/cubehash.c Fri Nov 6 12:39:06 2009
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Downloaded from http://cubehash.cr.yp.to/
- *
- * Changes by Nightgunner5:
- * Added CubeHash_ prefix
- * Converted to stdint.h
- */
-
-#define CUBEHASH_ROUNDS 8
-#define CUBEHASH_BLOCKBYTES 1
-
-#include <stdint.h>
-#include "cubehash.h"
-
-#define ROTATE(a,b) (((a) << (b)) | ((a) >> (32 - b)))
-
-static void CubeHash_transform(CubeHash_hashState *state)
-{
- int i;
- int r;
- uint32_t y[16];
-
- for (r = 0;r < CUBEHASH_ROUNDS;++r) {
- for (i = 0;i < 16;++i) state->x[i + 16] += state->x[i];
- for (i = 0;i < 16;++i) y[i ^ 8] = state->x[i];
- for (i = 0;i < 16;++i) state->x[i] = ROTATE(y[i],7);
- for (i = 0;i < 16;++i) state->x[i] ^= state->x[i + 16];
- for (i = 0;i < 16;++i) y[i ^ 2] = state->x[i + 16];
- for (i = 0;i < 16;++i) state->x[i + 16] = y[i];
- for (i = 0;i < 16;++i) state->x[i + 16] += state->x[i];
- for (i = 0;i < 16;++i) y[i ^ 4] = state->x[i];
- for (i = 0;i < 16;++i) state->x[i] = ROTATE(y[i],11);
- for (i = 0;i < 16;++i) state->x[i] ^= state->x[i + 16];
- for (i = 0;i < 16;++i) y[i ^ 1] = state->x[i + 16];
- for (i = 0;i < 16;++i) state->x[i + 16] = y[i];
- }
-}
-
-CubeHash_HashReturn CubeHash_Init(CubeHash_hashState *state, int
hashbitlen)
-{
- int i;
-
- if (hashbitlen < 8) return BAD_HASHBITLEN;
- if (hashbitlen > 512) return BAD_HASHBITLEN;
- if (hashbitlen != 8 * (hashbitlen / 8)) return BAD_HASHBITLEN;
-
- state->hashbitlen = hashbitlen;
- for (i = 0;i < 32;++i) state->x[i] = 0;
- state->x[0] = hashbitlen / 8;
- state->x[1] = CUBEHASH_BLOCKBYTES;
- state->x[2] = CUBEHASH_ROUNDS;
- for (i = 0;i < 10;++i) CubeHash_transform(state);
- state->pos = 0;
- return SUCCESS;
-}
-
-CubeHash_HashReturn CubeHash_Update(CubeHash_hashState *state,
- const CubeHash_BitSequence *data,
- CubeHash_DataLength databitlen)
-{
- /* caller promises us that previous data had integral number of bytes */
- /* so state->pos is a multiple of 8 */
-
- while (databitlen >= 8) {
- uint32_t u = *data;
- u <<= 8 * ((state->pos / 8) % 4);
- state->x[state->pos / 32] ^= u;
- data += 1;
- databitlen -= 8;
- state->pos += 8;
- if (state->pos == 8 * CUBEHASH_BLOCKBYTES) {
- CubeHash_transform(state);
- state->pos = 0;
- }
- }
- if (databitlen > 0) {
- uint32_t u = *data;
- u <<= 8 * ((state->pos / 8) % 4);
- state->x[state->pos / 32] ^= u;
- state->pos += databitlen;
- }
- return SUCCESS;
-}
-
-CubeHash_HashReturn CubeHash_Final(CubeHash_hashState *state,
CubeHash_BitSequence *hashval)
-{
- int i;
- uint32_t u;
-
- u = (128 >> (state->pos % 8));
- u <<= 8 * ((state->pos / 8) % 4);
- state->x[state->pos / 32] ^= u;
- CubeHash_transform(state);
- state->x[31] ^= 1;
- for (i = 0;i < 10;++i) CubeHash_transform(state);
- for (i = 0;i < state->hashbitlen / 8;++i) hashval[i] = state->x[i / 4]
>> (8 * (i % 4));
-
- return SUCCESS;
-}
-
-CubeHash_HashReturn CubeHash_Hash(int hashbitlen, const
CubeHash_BitSequence *data,
- CubeHash_DataLength databitlen, CubeHash_BitSequence
*hashval)
-{
- CubeHash_hashState state;
- if (CubeHash_Init(&state,hashbitlen) != SUCCESS) return BAD_HASHBITLEN;
- CubeHash_Update(&state,data,databitlen);
- return CubeHash_Final(&state,hashval);
-}
=======================================
--- /third-party/cubehash.h Fri Nov 6 12:39:06 2009
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Downloaded from http://cubehash.cr.yp.to/
- *
- * Changes by Nightgunner5:
- * Added CubeHash_ prefix
- */
-
-#ifndef cubehash_h
-#define cubehash_h
-#include <stdint.h>
-
-typedef unsigned char CubeHash_BitSequence;
-typedef unsigned long long CubeHash_DataLength;
-typedef enum { SUCCESS = 0, FAIL = 1, BAD_HASHBITLEN = 2 }
CubeHash_HashReturn;
-
-typedef struct {
- int hashbitlen;
- int pos; /* number of bits read into x from current block */
- uint32_t x[32];
-} CubeHash_hashState;
-
-CubeHash_HashReturn CubeHash_Init(CubeHash_hashState *state, int
hashbitlen);
-
-CubeHash_HashReturn CubeHash_Update(CubeHash_hashState *state, const
CubeHash_BitSequence *data,
- CubeHash_DataLength databitlen);
-
-CubeHash_HashReturn CubeHash_Final(CubeHash_hashState *state,
CubeHash_BitSequence *hashval);
-
-CubeHash_HashReturn CubeHash_Hash(int hashbitlen, const
CubeHash_BitSequence *data,
- CubeHash_DataLength databitlen, CubeHash_BitSequence
*hashval);
-
-#endif
=======================================
--- /third-party/md5.h Fri Nov 6 12:39:06 2009
+++ /dev/null
@@ -1,40 +0,0 @@
-/* MD5.H - header file for MD5C.C
- */
-
-/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
-rights reserved.
-
-License to copy and use this software is granted provided that it
-is identified as the "RSA Data Security, Inc. MD5 Message-Digest
-Algorithm" in all material mentioning or referencing this software
-or this function.
-
-License is also granted to make and use derivative works provided
-that such works are identified as "derived from the RSA Data
-Security, Inc. MD5 Message-Digest Algorithm" in all material
-mentioning or referencing the derived work.
-
-RSA Data Security, Inc. makes no representations concerning either
-the merchantability of this software or the suitability of this
-software for any particular purpose. It is provided "as is"
-without express or implied warranty of any kind.
-
-These notices must be retained in any copies of any part of this
-documentation and/or software.
- */
-
-#ifndef _MD5_H_
-#define _MD5_H_
-
-/* MD5 context. */
-typedef struct {
- unsigned long state[4]; /* state (ABCD) */
- unsigned long count[2]; /* number of bits, modulo 2^64 (lsb first) */
- unsigned char buffer[64]; /* input buffer */
-} MD5_CTX;
-
-void MD5Init (MD5_CTX *);
-void MD5Update (MD5_CTX *, unsigned char *, unsigned int);
-void MD5Final (unsigned char [16], MD5_CTX *);
-
-#endif
=======================================
--- /third-party/md5c.c Fri Nov 6 12:39:06 2009
+++ /dev/null
@@ -1,336 +0,0 @@
-/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
- */
-
-/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
-rights reserved.
-
-License to copy and use this software is granted provided that it
-is identified as the "RSA Data Security, Inc. MD5 Message-Digest
-Algorithm" in all material mentioning or referencing this software
-or this function.
-
-License is also granted to make and use derivative works provided
-that such works are identified as "derived from the RSA Data
-Security, Inc. MD5 Message-Digest Algorithm" in all material
-mentioning or referencing the derived work.
-
-RSA Data Security, Inc. makes no representations concerning either
-the merchantability of this software or the suitability of this
-software for any particular purpose. It is provided "as is"
-without express or implied warranty of any kind.
-
-These notices must be retained in any copies of any part of this
-documentation and/or software.
- */
-
-#include "md5global.h"
-#include "md5.h"
-
-/* Constants for MD5Transform routine.
- */
-
-
-#define S11 7
-#define S12 12
-#define S13 17
-#define S14 22
-#define S21 5
-#define S22 9
-#define S23 14
-#define S24 20
-#define S31 4
-#define S32 11
-#define S33 16
-#define S34 23
-#define S41 6
-#define S42 10
-#define S43 15
-#define S44 21
-
-static void MD5Transform PROTO_LIST ((UINT4 [4], unsigned char [64]));
-static void Encode PROTO_LIST
- ((unsigned char *, UINT4 *, unsigned int));
-static void Decode PROTO_LIST
- ((UINT4 *, unsigned char *, unsigned int));
-static void MD5_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int));
-static void MD5_memset PROTO_LIST ((POINTER, int, unsigned int));
-
-static unsigned char PADDING[64] = {
- 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-/* F, G, H and I are basic MD5 functions.
- */
-#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
-#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
-#define H(x, y, z) ((x) ^ (y) ^ (z))
-#define I(x, y, z) ((y) ^ ((x) | (~z)))
-
-/* ROTATE_LEFT rotates x left n bits.
- */
-#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
-
-/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
-Rotation is separate from addition to prevent recomputation.
- */
-#define FF(a, b, c, d, x, s, ac) { \
- (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-#define GG(a, b, c, d, x, s, ac) { \
- (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-#define HH(a, b, c, d, x, s, ac) { \
- (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-#define II(a, b, c, d, x, s, ac) { \
- (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-
-/* MD5 initialization. Begins an MD5 operation, writing a new context.
- */
-void MD5Init (context)
-MD5_CTX *context; /* context */
-{
- context->count[0] = context->count[1] = 0;
- /* Load magic initialization constants.
-*/
- context->state[0] = 0x67452301;
- context->state[1] = 0xefcdab89;
- context->state[2] = 0x98badcfe;
- context->state[3] = 0x10325476;
-}
-
-/* MD5 block update operation. Continues an MD5 message-digest
- operation, processing another message block, and updating the
- context.
- */
-void MD5Update (context, input, inputLen)
-MD5_CTX *context; /* context */
-unsigned char *input; /* input block */
-unsigned int inputLen; /* length of input block */
-{
- unsigned int i, index, partLen;
-
- /* Compute number of bytes mod 64 */
- index = (unsigned int)((context->count[0] >> 3) & 0x3F);
-
- /* Update number of bits */
- if ((context->count[0] += ((UINT4)inputLen << 3))
- < ((UINT4)inputLen << 3))
- context->count[1]++;
- context->count[1] += ((UINT4)inputLen >> 29);
-
- partLen = 64 - index;
-
- /* Transform as many times as possible.
-*/
- if (inputLen >= partLen) {
- MD5_memcpy
- ((POINTER)&context->buffer[index], (POINTER)input, partLen);
- MD5Transform (context->state, context->buffer);
-
- for (i = partLen; i + 63 < inputLen; i += 64)
- MD5Transform (context->state, &input[i]);
-
- index = 0;
- }
- else
- i = 0;
-
- /* Buffer remaining input */
- MD5_memcpy
- ((POINTER)&context->buffer[index], (POINTER)&input[i],
- inputLen-i);
-}
-
-/* MD5 finalization. Ends an MD5 message-digest operation, writing the
- the message digest and zeroizing the context.
- */
-void MD5Final (digest, context)
-unsigned char digest[16]; /* message digest */
-MD5_CTX *context; /* context */
-{
- unsigned char bits[8];
- unsigned int index, padLen;
-
- /* Save number of bits */
- Encode (bits, context->count, 8);
-
- /* Pad out to 56 mod 64.
-*/
- index = (unsigned int)((context->count[0] >> 3) & 0x3f);
- padLen = (index < 56) ? (56 - index) : (120 - index);
- MD5Update (context, PADDING, padLen);
-
- /* Append length (before padding) */
- MD5Update (context, bits, 8);
-
- /* Store state in digest */
- Encode (digest, context->state, 16);
-
- /* Zeroize sensitive information.
-*/
- MD5_memset ((POINTER)context, 0, sizeof (*context));
-}
-
-/* MD5 basic transformation. Transforms state based on block.
- */
-static void MD5Transform (state, block)
-UINT4 state[4];
-unsigned char block[64];
-{
- UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
-
- Decode (x, block, 64);
-
- /* Round 1 */
- FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
- FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
- FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
- FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
- FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
- FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
- FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
- FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
- FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
- FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
- FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
- FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
- FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
- FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
- FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
- FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
-
- /* Round 2 */
- GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
- GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
- GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
- GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
- GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
- GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */
- GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
- GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
- GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
- GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
- GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
- GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
- GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
- GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
- GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
- GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
-
- /* Round 3 */
- HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
- HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
- HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
- HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
- HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
- HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
- HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
- HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
- HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
- HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
- HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
- HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */
- HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
- HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
- HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
- HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
-
- /* Round 4 */
- II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
- II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
- II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
- II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
- II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
- II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
- II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
- II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
- II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
- II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
- II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
- II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
- II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
- II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
- II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
- II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
-
- state[0] += a;
- state[1] += b;
- state[2] += c;
- state[3] += d;
-
- /* Zeroize sensitive information.
- */
- MD5_memset ((POINTER)x, 0, sizeof (x));
-}
-
-/* Encodes input (UINT4) into output (unsigned char). Assumes len is
- a multiple of 4.
- */
-static void Encode (output, input, len)
-unsigned char *output;
-UINT4 *input;
-unsigned int len;
-{
- unsigned int i, j;
-
- for (i = 0, j = 0; j < len; i++, j += 4) {
- output[j] = (unsigned char)(input[i] & 0xff);
- output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
- output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
- output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
- }
-}
-
-/* Decodes input (unsigned char) into output (UINT4). Assumes len is
- a multiple of 4.
- */
-static void Decode (output, input, len)
-UINT4 *output;
-unsigned char *input;
-unsigned int len;
-{
- unsigned int i, j;
-
- for (i = 0, j = 0; j < len; i++, j += 4)
- output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) |
- (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
-}
-
-/* Note: Replace "for loop" with standard memcpy if possible.
- */
-
-static void MD5_memcpy (output, input, len)
-POINTER output;
-POINTER input;
-unsigned int len;
-{
- unsigned int i;
-
- for (i = 0; i < len; i++)
- output[i] = input[i];
-}
-
-/* Note: Replace "for loop" with standard memset if possible.
- */
-static void MD5_memset (output, value, len)
-POINTER output;
-int value;
-unsigned int len;
-{
- unsigned int i;
-
- for (i = 0; i < len; i++)
- ((char *)output)[i] = (char)value;
-}
=======================================
--- /third-party/md5global.h Fri Nov 6 12:39:06 2009
+++ /dev/null
@@ -1,32 +0,0 @@
-/* MD5GLOBAL.H - RSAREF types and constants
- */
-
-/* PROTOTYPES should be set to one if and only if the compiler supports
- function argument prototyping.
- The following makes PROTOTYPES default to 0 if it has not already
- been defined with C compiler flags.
- */
-
-#ifndef PROTOTYPES
-#define PROTOTYPES 0
-#endif
-
-/* POINTER defines a generic pointer type */
-typedef unsigned char *POINTER;
-
-/* UINT2 defines a two byte word */
-typedef unsigned short int UINT2;
-
-/* UINT4 defines a four byte word */
-typedef unsigned long int UINT4;
-
-/* PROTO_LIST is defined depending on how PROTOTYPES is defined above.
-If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it
- returns an empty list.
- */
-#if PROTOTYPES
-#define PROTO_LIST(list) list
-#else
-#define PROTO_LIST(list) ()
-#endif
-
=======================================
--- /third-party/nessie.h Fri Nov 6 12:39:06 2009
+++ /dev/null
@@ -1,139 +0,0 @@
-
-#ifndef PORTABLE_C__
-#define PORTABLE_C__
-
-#include <limits.h>
-
-/* Definition of minimum-width integer types
- *
- * u8 -> unsigned integer type, at least 8 bits, equivalent to unsigned
char
- * u16 -> unsigned integer type, at least 16 bits
- * u32 -> unsigned integer type, at least 32 bits
- *
- * s8, s16, s32 -> signed counterparts of u8, u16, u32
- *
- * Always use macro's T8(), T16() or T32() to obtain exact-width results,
- * i.e., to specify the size of the result of each expression.
- */
-
-typedef signed char s8;
-typedef unsigned char u8;
-
-#if UINT_MAX >= 4294967295UL
-
-typedef signed short s16;
-typedef signed int s32;
-typedef unsigned short u16;
-typedef unsigned int u32;
-
-#define ONE32 0xffffffffU
-
-#else
-
-typedef signed int s16;
-typedef signed long s32;
-typedef unsigned int u16;
-typedef unsigned long u32;
-
-#define ONE32 0xffffffffUL
-
-#endif
-
-#define ONE8 0xffU
-#define ONE16 0xffffU
-
-#define T8(x) ((x) & ONE8)
-#define T16(x) ((x) & ONE16)
-#define T32(x) ((x) & ONE32)
-
-#ifdef _MSC_VER
-typedef unsigned __int64 u64;
-typedef signed __int64 s64;
-#define LL(v) (v##i64)
-#define ONE64 LL(0xffffffffffffffff)
-#else /* !_MSC_VER */
-typedef unsigned long long u64;
-typedef signed long long s64;
-#define LL(v) (v##ULL)
-#define ONE64 LL(0xffffffffffffffff)
-#endif /* ?_MSC_VER */
-#define T64(x) ((x) & ONE64)
-#define ROTR64(v, n) (((v) >> (n)) | T64((v) << (64 - (n))))
-/*
- * Note: the test is used to detect native 64-bit architectures;
- * if the unsigned long is strictly greater than 32-bit, it is
- * assumed to be at least 64-bit. This will not work correctly
- * on (old) 36-bit architectures (PDP-11 for instance).
- *
- * On non-64-bit architectures, "long long" is used.
- */
-
-/*
- * U8TO32_BIG(c) returns the 32-bit value stored in big-endian convention
- * in the unsigned char array pointed to by c.
- */
-#define U8TO32_BIG(c) (((u32)T8(*(c)) << 24) | ((u32)T8(*((c) + 1)) <<
16) | ((u32)T8(*((c) + 2)) << 8) | ((u32)T8(*((c) + 3))))
-
-/*
- * U8TO32_LITTLE(c) returns the 32-bit value stored in little-endian
convention
- * in the unsigned char array pointed to by c.
- */
-#define U8TO32_LITTLE(c) (((u32)T8(*(c))) | ((u32)T8(*((c) + 1)) << 8) |
(u32)T8(*((c) + 2)) << 16) | ((u32)T8(*((c) + 3)) << 24))
-
-/*
- * U8TO32_BIG(c, v) stores the 32-bit-value v in big-endian convention
- * into the unsigned char array pointed to by c.
- */
-#define U32TO8_BIG(c, v) do { u32 x = (v); u8 *d = (c); d[0] = T8(x >>
24); d[1] = T8(x >> 16); d[2] = T8(x >> 8); d[3] = T8(x); } while (0)
-
-/*
- * U8TO32_LITTLE(c, v) stores the 32-bit-value v in little-endian
convention
- * into the unsigned char array pointed to by c.
- */
-#define U32TO8_LITTLE(c, v) do { u32 x = (v); u8 *d = (c); d[0] =
T8(x); d[1] = T8(x >> 8); d[2] = T8(x >> 16); d[3] = T8(x >> 24); } while
(0)
-
-/*
- * ROTL32(v, n) returns the value of the 32-bit unsigned value v after
- * a rotation of n bits to the left. It might be replaced by the
appropriate
- * architecture-specific macro.
- *
- * It evaluates v and n twice.
- *
- * The compiler might emit a warning if n is the constant 0. The result
- * is undefined if n is greater than 31.
- */
-#define ROTL32(v, n) (T32((v) << (n)) | ((v) >> (32 - (n))))
-
-/*
- * Whirlpool-specific definitions.
- */
-
-#define DIGESTBYTES 64
-#define DIGESTBITS (8*DIGESTBYTES) /* 512 */
-
-#define WBLOCKBYTES 64
-#define WBLOCKBITS (8*WBLOCKBYTES) /* 512 */
-
-#define LENGTHBYTES 32
-#define LENGTHBITS (8*LENGTHBYTES) /* 256 */
-
-typedef struct NESSIEstruct {
- u8 bitLength[LENGTHBYTES]; /* global number of hashed bits (256-bit
counter) */
- u8 buffer[WBLOCKBYTES]; /* buffer of data to hash */
- int bufferBits; /* current number of bits on the buffer */
- int bufferPos; /* current (possibly incomplete) byte slot on the
buffer */
- u64 hash[DIGESTBYTES/8]; /* the hashing state */
-} NESSIEstruct;
-
-// Added by Nightgunner5
-void NESSIEinit(struct NESSIEstruct * const structpointer);
-void NESSIEadd(const unsigned char * const source,
- unsigned long sourceBits,
- struct NESSIEstruct * const structpointer);
-void NESSIEfinalize(struct NESSIEstruct * const structpointer,
- unsigned char * const result);
-// End added by Nightgunner5
-
-
-#endif /* PORTABLE_C__ */
-
=======================================
--- /third-party/sha1.c Fri Nov 6 12:39:06 2009
+++ /dev/null
@@ -1,389 +0,0 @@
-/*
- * sha1.c
- *
- * Description:
- * This file implements the Secure Hashing Algorithm 1 as
- * defined in FIPS PUB 180-1 published April 17, 1995.
- *
- * The SHA-1, produces a 160-bit message digest for a given
- * data stream. It should take about 2**n steps to find a
- * message with the same digest as a given message and
- * 2**(n/2) to find any two messages with the same digest,
- * when n is the digest size in bits. Therefore, this
- * algorithm can serve as a means of providing a
- * "fingerprint" for a message.
- *
- * Portability Issues:
- * SHA-1 is defined in terms of 32-bit "words". This code
- * uses <stdint.h> (included via "sha1.h" to define 32 and 8
- * bit unsigned integer types. If your C compiler does not
- * support 32 bit unsigned integers, this code is not
- * appropriate.
- *
- * Caveats:
- * SHA-1 is designed to work with messages less than 2^64 bits
- * long. Although SHA-1 allows a message digest to be generated
- * for messages of any number of bits less than 2^64, this
- * implementation only works with messages with a length that is
- * a multiple of the size of an 8-bit character.
- *
- */
-
-#include "sha1.h"
-
-/*
- * Define the SHA1 circular left shift macro
- */
-#define SHA1CircularShift(bits,word) \
- (((word) << (bits)) | ((word) >> (32-(bits))))
-
-/* Local Function Prototyptes */
-void SHA1PadMessage(SHA1Context *);
-void SHA1ProcessMessageBlock(SHA1Context *);
-
-/*
- * SHA1Reset
- *
- * Description:
- * This function will initialize the SHA1Context in preparation
- * for computing a new SHA1 message digest.
- *
- * Parameters:
- * context: [in/out]
- * The context to reset.
- *
- * Returns:
- * sha Error Code.
- *
- */
-int SHA1Reset(SHA1Context *context)
-{
- if (!context)
- {
- return shaNull;
- }
-
- context->Length_Low = 0;
- context->Length_High = 0;
- context->Message_Block_Index = 0;
-
- context->Intermediate_Hash[0] = 0x67452301;
- context->Intermediate_Hash[1] = 0xEFCDAB89;
- context->Intermediate_Hash[2] = 0x98BADCFE;
- context->Intermediate_Hash[3] = 0x10325476;
- context->Intermediate_Hash[4] = 0xC3D2E1F0;
-
- context->Computed = 0;
- context->Corrupted = 0;
-
- return shaSuccess;
-}
-
-/*
- * SHA1Result
- *
- * Description:
- * This function will return the 160-bit message digest into the
- * Message_Digest array provided by the caller.
- * NOTE: The first octet of hash is stored in the 0th element,
- * the last octet of hash in the 19th element.
- *
- * Parameters:
- * context: [in/out]
- * The context to use to calculate the SHA-1 hash.
- * Message_Digest: [out]
- * Where the digest is returned.
- *
- * Returns:
- * sha Error Code.
- *
- */
-int SHA1Result( SHA1Context *context,
- uint8_t Message_Digest[SHA1HashSize])
-{
- int i;
-
- if (!context || !Message_Digest)
- {
- return shaNull;
- }
-
- if (context->Corrupted)
- {
- return context->Corrupted;
- }
-
- if (!context->Computed)
- {
- SHA1PadMessage(context);
- for(i=0; i<64; ++i)
- {
- /* message may be sensitive, clear it out */
- context->Message_Block[i] = 0;
- }
- context->Length_Low = 0; /* and clear length */
- context->Length_High = 0;
- context->Computed = 1;
-
- }
-
- for(i = 0; i < SHA1HashSize; ++i)
- {
- Message_Digest[i] = context->Intermediate_Hash[i>>2]
- >> 8 * ( 3 - ( i & 0x03 ) );
- }
-
- return shaSuccess;
-}
-
-/*
- * SHA1Input
- *
- * Description:
- * This function accepts an array of octets as the next portion
- * of the message.
- *
- * Parameters:
- * context: [in/out]
- * The SHA context to update
- * message_array: [in]
- * An array of characters representing the next portion of
- * the message.
- * length: [in]
- * The length of the message in message_array
- *
- * Returns:
- * sha Error Code.
- *
- */
-int SHA1Input( SHA1Context *context,
- const uint8_t *message_array,
- unsigned length)
-{
- if (!length)
- {
- return shaSuccess;
- }
-
- if (!context || !message_array)
- {
- return shaNull;
- }
-
- if (context->Computed)
- {
- context->Corrupted = shaStateError;
-
- return shaStateError;
- }
-
- if (context->Corrupted)
- {
- return context->Corrupted;
- }
- while(length-- && !context->Corrupted)
- {
- context->Message_Block[context->Message_Block_Index++] =
- (*message_array & 0xFF);
-
- context->Length_Low += 8;
- if (context->Length_Low == 0)
- {
- context->Length_High++;
- if (context->Length_High == 0)
- {
- /* Message is too long */
- context->Corrupted = 1;
- }
- }
-
- if (context->Message_Block_Index == 64)
- {
- SHA1ProcessMessageBlock(context);
- }
-
- message_array++;
- }
-
- return shaSuccess;
-}
-
-/*
- * SHA1ProcessMessageBlock
- *
- * Description:
- * This function will process the next 512 bits of the message
- * stored in the Message_Block array.
- *
- * Parameters:
- * None.
- *
- * Returns:
- * Nothing.
- *
- * Comments:
-
- * Many of the variable names in this code, especially the
- * single character names, were used because those were the
- * names used in the publication.
- *
- *
- */
-void SHA1ProcessMessageBlock(SHA1Context *context)
-{
- const uint32_t K[] = { /* Constants defined in SHA-1 */
- 0x5A827999,
- 0x6ED9EBA1,
- 0x8F1BBCDC,
- 0xCA62C1D6
- };
- int t; /* Loop counter */
- uint32_t temp; /* Temporary word value */
- uint32_t W[80]; /* Word sequence */
- uint32_t A, B, C, D, E; /* Word buffers */
-
- /*
- * Initialize the first 16 words in the array W
- */
- for(t = 0; t < 16; t++)
- {
- W[t] = context->Message_Block[t * 4] << 24;
- W[t] |= context->Message_Block[t * 4 + 1] << 16;
- W[t] |= context->Message_Block[t * 4 + 2] << 8;
- W[t] |= context->Message_Block[t * 4 + 3];
- }
-
- for(t = 16; t < 80; t++)
- {
- W[t] = SHA1CircularShift(1,W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16]);
- }
-
- A = context->Intermediate_Hash[0];
- B = context->Intermediate_Hash[1];
- C = context->Intermediate_Hash[2];
- D = context->Intermediate_Hash[3];
- E = context->Intermediate_Hash[4];
-
- for(t = 0; t < 20; t++)
- {
- temp = SHA1CircularShift(5,A) +
- ((B & C) | ((~B) & D)) + E + W[t] + K[0];
- E = D;
- D = C;
- C = SHA1CircularShift(30,B);
-
- B = A;
- A = temp;
- }
-
- for(t = 20; t < 40; t++)
- {
- temp = SHA1CircularShift(5,A) + (B ^ C ^ D) + E + W[t] + K[1];
- E = D;
- D = C;
- C = SHA1CircularShift(30,B);
- B = A;
- A = temp;
- }
-
- for(t = 40; t < 60; t++)
- {
- temp = SHA1CircularShift(5,A) +
- ((B & C) | (B & D) | (C & D)) + E + W[t] + K[2];
- E = D;
- D = C;
- C = SHA1CircularShift(30,B);
- B = A;
- A = temp;
- }
-
- for(t = 60; t < 80; t++)
- {
- temp = SHA1CircularShift(5,A) + (B ^ C ^ D) + E + W[t] + K[3];
- E = D;
- D = C;
- C = SHA1CircularShift(30,B);
- B = A;
- A = temp;
- }
-
- context->Intermediate_Hash[0] += A;
- context->Intermediate_Hash[1] += B;
- context->Intermediate_Hash[2] += C;
- context->Intermediate_Hash[3] += D;
- context->Intermediate_Hash[4] += E;
-
- context->Message_Block_Index = 0;
-}
-
-/*
- * SHA1PadMessage
- *
-
- * Description:
- * According to the standard, the message must be padded to an even
- * 512 bits. The first padding bit must be a '1'. The last 64
- * bits represent the length of the original message. All bits in
- * between should be 0. This function will pad the message
- * according to those rules by filling the Message_Block array
- * accordingly. It will also call the ProcessMessageBlock function
- * provided appropriately. When it returns, it can be assumed that
- * the message digest has been computed.
- *
- * Parameters:
- * context: [in/out]
- * The context to pad
- * ProcessMessageBlock: [in]
- * The appropriate SHA*ProcessMessageBlock function
- * Returns:
- * Nothing.
- *
- */
-
-void SHA1PadMessage(SHA1Context *context)
-{
- /*
- * Check to see if the current message block is too small to hold
- * the initial padding bits and length. If so, we will pad the
- * block, process it, and then continue padding into a second
- * block.
- */
- if (context->Message_Block_Index > 55)
- {
- context->Message_Block[context->Message_Block_Index++] = 0x80;
- while(context->Message_Block_Index < 64)
- {
- context->Message_Block[context->Message_Block_Index++] = 0;
- }
-
- SHA1ProcessMessageBlock(context);
-
- while(context->Message_Block_Index < 56)
- {
- context->Message_Block[context->Message_Block_Index++] = 0;
- }
- }
- else
- {
- context->Message_Block[context->Message_Block_Index++] = 0x80;
- while(context->Message_Block_Index < 56)
- {
-
- context->Message_Block[context->Message_Block_Index++] = 0;
- }
- }
-
- /*
- * Store the message length as the last 8 octets
- */
- context->Message_Block[56] = context->Length_High >> 24;
- context->Message_Block[57] = context->Length_High >> 16;
- context->Message_Block[58] = context->Length_High >> 8;
- context->Message_Block[59] = context->Length_High;
- context->Message_Block[60] = context->Length_Low >> 24;
- context->Message_Block[61] = context->Length_Low >> 16;
- context->Message_Block[62] = context->Length_Low >> 8;
- context->Message_Block[63] = context->Length_Low;
-
- SHA1ProcessMessageBlock(context);
-}
=======================================
--- /third-party/sha1.h Fri Nov 6 12:39:06 2009
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * sha1.h
- *
- * Description:
- * This is the header file for code which implements the Secure
- * Hashing Algorithm 1 as defined in FIPS PUB 180-1 published
- * April 17, 1995.
- *
- * Many of the variable names in this code, especially the
- * single character names, were used because those were the names
- * used in the publication.
- *
- * Please read the file sha1.c for more information.
- *
- */
-
-#ifndef _SHA1_H_
-#define _SHA1_H_
-
-#include <stdint.h>
-/*
- * If you do not have the ISO standard stdint.h header file, then you
- * must typdef the following:
- * name meaning
- * uint32_t unsigned 32 bit integer
- * uint8_t unsigned 8 bit integer (i.e., unsigned char)
- * int_least16_t integer of >= 16 bits
- *
- */
-
-#ifndef _SHA_enum_
-#define _SHA_enum_
-enum
-{
- shaSuccess = 0,
- shaNull, /* Null pointer parameter */
- shaInputTooLong, /* input data too long */
- shaStateError /* called Input after Result */
-};
-#endif
-#define SHA1HashSize 20
-
-/*
- * This structure will hold context information for the SHA-1
- * hashing operation
- */
-typedef struct SHA1Context
-{
- uint32_t Intermediate_Hash[SHA1HashSize/4]; /* Message Digest */
-
- uint32_t Length_Low; /* Message length in bits */
- uint32_t Length_High; /* Message length in bits */
-
- /* Index into message block array */
- int_least16_t Message_Block_Index;
- uint8_t Message_Block[64]; /* 512-bit message blocks */
-
- int Computed; /* Is the digest computed? */
- int Corrupted; /* Is the message digest corrupted? */
-} SHA1Context;
-
-/*
- * Function Prototypes
- */
-
-int SHA1Reset( SHA1Context *);
-int SHA1Input( SHA1Context *,
- const uint8_t *,
- unsigned int);
-int SHA1Result( SHA1Context *,
- uint8_t Message_Digest[SHA1HashSize]);
-
-#endif
=======================================
***Additional files exist in this changeset.***