<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ --> <title>src/Data/Hash/MD5/Zord64_HARD.lhs</title> <link type='text/css' rel='stylesheet' href='hscolour.css' /> </head> <body> <pre><a name="line-1"></a><span class='hs-varop'>>--</span> <span class='hs-cpp'>#</span><span class='hs-varid'>hide</span> <a name="line-2"></a><span class='hs-varop'>></span> <span class='hs-keyword'>module</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Hash</span><span class='hs-varop'>.</span><span class='hs-conid'>MD5</span><span class='hs-varop'>.</span><span class='hs-conid'>Zord64_HARD</span> <span class='hs-layout'>(</span><span class='hs-conid'>Zord64</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span> </pre> <pre><a name="line-1"></a><span class='hs-varop'>></span> <span class='hs-keyword'>import</span> <span class='hs-conid'>Word</span> <a name="line-2"></a><span class='hs-varop'>></span> <span class='hs-keyword'>import</span> <span class='hs-conid'>Bits</span> </pre> <pre><a name="line-1"></a><span class='hs-varop'>></span> <span class='hs-keyword'>data</span> <span class='hs-conid'>Zord64</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>W64</span> <span class='hs-layout'>{</span><span class='hs-varid'>lo</span><span class='hs-layout'>,</span><span class='hs-varid'>hi</span><span class='hs-keyglyph'>::</span><span class='hs-conid'>Word32</span><span class='hs-layout'>}</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span><span class='hs-layout'>,</span> <span class='hs-conid'>Bounded</span><span class='hs-layout'>)</span> </pre> <pre><a name="line-1"></a><span class='hs-varop'>></span> <span class='hs-definition'>w64ToInteger</span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>lo</span><span class='hs-layout'>,</span><span class='hs-varid'>hi</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>hi</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>toInteger</span> <span class='hs-varid'>lo</span> <span class='hs-varop'>+</span> <span class='hs-num'>0x100000000</span> <span class='hs-varop'>*</span> <span class='hs-varid'>toInteger</span> <span class='hs-varid'>hi</span> <a name="line-2"></a><span class='hs-varop'>></span> <span class='hs-definition'>integerToW64</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>x</span> <span class='hs-varop'>`quotRem`</span> <span class='hs-num'>0x100000000</span> <span class='hs-keyword'>of</span> <a name="line-3"></a><span class='hs-varop'>></span> <span class='hs-layout'>(</span><span class='hs-varid'>h</span><span class='hs-layout'>,</span><span class='hs-varid'>l</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>fromInteger</span> <span class='hs-varid'>l</span><span class='hs-layout'>,</span> <span class='hs-varid'>hi</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>fromInteger</span> <span class='hs-varid'>h</span><span class='hs-layout'>}</span> </pre> <pre><a name="line-1"></a><span class='hs-varop'>></span> <span class='hs-keyword'>instance</span> <span class='hs-conid'>Show</span> <span class='hs-conid'>Zord64</span> </pre> <pre><a name="line-1"></a><span class='hs-varop'>></span> <span class='hs-keyword'>instance</span> <span class='hs-conid'>Read</span> <span class='hs-conid'>Zord64</span> </pre> <pre><a name="line-1"></a><span class='hs-varop'>></span> <span class='hs-keyword'>instance</span> <span class='hs-conid'>Num</span> <span class='hs-conid'>Zord64</span> <span class='hs-keyword'>where</span> <a name="line-2"></a><span class='hs-varop'>></span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>lo_a</span><span class='hs-layout'>,</span><span class='hs-varid'>hi</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>hi_a</span><span class='hs-layout'>}</span> <span class='hs-varop'>+</span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>lo_b</span><span class='hs-layout'>,</span><span class='hs-varid'>hi</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>hi_b</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>lo'</span><span class='hs-layout'>,</span> <span class='hs-varid'>hi</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>hi'</span><span class='hs-layout'>}</span> <a name="line-3"></a><span class='hs-varop'>></span> <span class='hs-keyword'>where</span> <span class='hs-varid'>lo'</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lo_a</span> <span class='hs-varop'>+</span> <span class='hs-varid'>lo_b</span> <a name="line-4"></a><span class='hs-varop'>></span> <span class='hs-varid'>hi'</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>hi_a</span> <span class='hs-varop'>+</span> <span class='hs-varid'>hi_b</span> <span class='hs-varop'>+</span> <span class='hs-keyword'>if</span> <span class='hs-varid'>lo'</span> <span class='hs-varop'><</span> <span class='hs-varid'>lo_a</span> <span class='hs-keyword'>then</span> <span class='hs-num'>1</span> <span class='hs-keyword'>else</span> <span class='hs-num'>0</span> <a name="line-5"></a><span class='hs-varop'>></span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>lo_a</span><span class='hs-layout'>,</span><span class='hs-varid'>hi</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>hi_a</span><span class='hs-layout'>}</span> <span class='hs-comment'>-</span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>lo_b</span><span class='hs-layout'>,</span><span class='hs-varid'>hi</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>hi_b</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>lo'</span><span class='hs-layout'>,</span> <span class='hs-varid'>hi</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>hi'</span><span class='hs-layout'>}</span> <a name="line-6"></a><span class='hs-varop'>></span> <span class='hs-keyword'>where</span> <span class='hs-varid'>lo'</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lo_a</span> <span class='hs-comment'>-</span> <span class='hs-varid'>lo_b</span> <a name="line-7"></a><span class='hs-varop'>></span> <span class='hs-varid'>hi'</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>hi_a</span> <span class='hs-comment'>-</span> <span class='hs-varid'>hi_b</span> <span class='hs-varop'>+</span> <span class='hs-keyword'>if</span> <span class='hs-varid'>lo'</span> <span class='hs-varop'>></span> <span class='hs-varid'>lo_a</span> <span class='hs-keyword'>then</span> <span class='hs-num'>1</span> <span class='hs-keyword'>else</span> <span class='hs-num'>0</span> <a name="line-8"></a><span class='hs-varop'>></span> <span class='hs-varid'>fromInteger</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>integerToW64</span> </pre> <pre><a name="line-1"></a><span class='hs-varop'>></span> <span class='hs-keyword'>instance</span> <span class='hs-conid'>Bits</span> <span class='hs-conid'>Zord64</span> <span class='hs-keyword'>where</span> <a name="line-2"></a><span class='hs-varop'>></span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>lo_a</span><span class='hs-layout'>,</span><span class='hs-varid'>hi</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>hi_a</span><span class='hs-layout'>}</span> <span class='hs-varop'>.&.</span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>lo_b</span><span class='hs-layout'>,</span><span class='hs-varid'>hi</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>hi_b</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>lo'</span><span class='hs-layout'>,</span> <span class='hs-varid'>hi</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>hi'</span><span class='hs-layout'>}</span> <a name="line-3"></a><span class='hs-varop'>></span> <span class='hs-keyword'>where</span> <span class='hs-varid'>lo'</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lo_a</span> <span class='hs-varop'>.&.</span> <span class='hs-varid'>lo_b</span> <a name="line-4"></a><span class='hs-varop'>></span> <span class='hs-varid'>hi'</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>hi_a</span> <span class='hs-varop'>.&.</span> <span class='hs-varid'>hi_b</span> <a name="line-5"></a><span class='hs-varop'>></span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>lo_a</span><span class='hs-layout'>,</span><span class='hs-varid'>hi</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>hi_a</span><span class='hs-layout'>}</span> <span class='hs-varop'>.|.</span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>lo_b</span><span class='hs-layout'>,</span><span class='hs-varid'>hi</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>hi_b</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>lo'</span><span class='hs-layout'>,</span> <span class='hs-varid'>hi</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>hi'</span><span class='hs-layout'>}</span> <a name="line-6"></a><span class='hs-varop'>></span> <span class='hs-keyword'>where</span> <span class='hs-varid'>lo'</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lo_a</span> <span class='hs-varop'>.|.</span> <span class='hs-varid'>lo_b</span> <a name="line-7"></a><span class='hs-varop'>></span> <span class='hs-varid'>hi'</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>hi_a</span> <span class='hs-varop'>.|.</span> <span class='hs-varid'>hi_b</span> <a name="line-8"></a><span class='hs-varop'>></span> <span class='hs-varid'>shift</span> <span class='hs-varid'>w</span> <span class='hs-num'>0</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>w</span> <a name="line-9"></a><span class='hs-varop'>></span> <span class='hs-varid'>shift</span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>lo</span><span class='hs-layout'>,</span><span class='hs-varid'>hi</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>hi</span><span class='hs-layout'>}</span> <span class='hs-varid'>x</span> <a name="line-10"></a><span class='hs-varop'>></span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>x</span> <span class='hs-varop'>></span> <span class='hs-num'>63</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span><span class='hs-keyglyph'>=</span><span class='hs-num'>0</span><span class='hs-layout'>,</span><span class='hs-varid'>hi</span><span class='hs-keyglyph'>=</span><span class='hs-num'>0</span><span class='hs-layout'>}</span> <a name="line-11"></a><span class='hs-varop'>></span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>x</span> <span class='hs-varop'>></span> <span class='hs-num'>31</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>0</span><span class='hs-layout'>,</span> <span class='hs-varid'>hi</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>shift</span> <span class='hs-varid'>lo</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-comment'>-</span><span class='hs-num'>32</span><span class='hs-layout'>)</span><span class='hs-layout'>}</span> <a name="line-12"></a><span class='hs-varop'>></span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>x</span> <span class='hs-varop'>></span> <span class='hs-num'>0</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>shift</span> <span class='hs-varid'>lo</span> <span class='hs-varid'>x</span><span class='hs-layout'>,</span> <span class='hs-varid'>hi</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>shift</span> <span class='hs-varid'>hi</span> <span class='hs-varid'>x</span> <span class='hs-varop'>.|.</span> <span class='hs-varid'>shift</span> <span class='hs-varid'>lo</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-comment'>-</span><span class='hs-num'>32</span><span class='hs-layout'>)</span><span class='hs-layout'>}</span> <a name="line-13"></a><span class='hs-varop'>></span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>x</span> <span class='hs-varop'><</span> <span class='hs-comment'>-</span><span class='hs-num'>63</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span><span class='hs-keyglyph'>=</span><span class='hs-num'>0</span><span class='hs-layout'>,</span><span class='hs-varid'>hi</span><span class='hs-keyglyph'>=</span><span class='hs-num'>0</span><span class='hs-layout'>}</span> <a name="line-14"></a><span class='hs-varop'>></span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>x</span> <span class='hs-varop'><</span> <span class='hs-comment'>-</span><span class='hs-num'>31</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>shift</span> <span class='hs-varid'>hi</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-varop'>+</span><span class='hs-num'>32</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>hi</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>0</span><span class='hs-layout'>}</span> <a name="line-15"></a><span class='hs-varop'>></span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>x</span> <span class='hs-varop'><</span> <span class='hs-num'>0</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>shift</span> <span class='hs-varid'>lo</span> <span class='hs-varid'>x</span> <span class='hs-varop'>.|.</span> <span class='hs-varid'>shift</span> <span class='hs-varid'>hi</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-varop'>+</span><span class='hs-num'>32</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>hi</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>shift</span> <span class='hs-varid'>hi</span> <span class='hs-varid'>x</span><span class='hs-layout'>}</span> <a name="line-16"></a><span class='hs-varop'>></span> <span class='hs-varid'>complement</span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>lo</span><span class='hs-layout'>,</span><span class='hs-varid'>hi</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>hi</span><span class='hs-layout'>}</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>W64</span><span class='hs-layout'>{</span><span class='hs-varid'>lo</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>complement</span> <span class='hs-varid'>lo</span><span class='hs-layout'>,</span><span class='hs-varid'>hi</span><span class='hs-keyglyph'>=</span><span class='hs-varid'>complement</span> <span class='hs-varid'>hi</span><span class='hs-layout'>}</span> </pre> <pre><a name="line-1"></a><span class='hs-varop'>></span> <span class='hs-keyword'>instance</span> <span class='hs-conid'>Integral</span> <span class='hs-conid'>Zord64</span> <span class='hs-keyword'>where</span> <a name="line-2"></a><span class='hs-varop'>></span> <span class='hs-varid'>toInteger</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>w64ToInteger</span> </pre> <pre><a name="line-1"></a><span class='hs-varop'>></span> <span class='hs-keyword'>instance</span> <span class='hs-conid'>Real</span> <span class='hs-conid'>Zord64</span> <a name="line-2"></a><span class='hs-varop'>></span> <span class='hs-keyword'>instance</span> <span class='hs-conid'>Enum</span> <span class='hs-conid'>Zord64</span> </pre> </body> </html>