/usr/share/doc/libghc-skein-doc/html/Crypto-Skein.html is in libghc-skein-doc 0.1.0.5-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Crypto.Skein</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();setSynopsis("mini_Crypto-Skein.html");};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="src/Crypto-Skein.html">Source</a></li><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">skein-0.1.0.5: Skein, a family of cryptographic hash functions. Includes Skein-MAC as well.</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Portability</th><td>portable (needs FFI)</td></tr><tr><th>Stability</th><td>provisional</td></tr><tr><th>Maintainer</th><td>felipe.lessa@gmail.com</td></tr><tr><th>Safe Haskell</th><td>Safe-Infered</td></tr></table><p class="caption">Crypto.Skein</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Using this module
</a><ul><li><a href="#g:2">Skein as a cryptographic hash function
</a></li><li><a href="#g:3">Skein as a message authentication code (MAC)
</a></li></ul></li><li><a href="#g:4">About Skein
</a></li><li><a href="#g:5">Main cryptographic hash functions
</a><ul><li><a href="#g:6">Skein-512-512
</a></li><li><a href="#g:7">Skein-1024-1024
</a></li><li><a href="#g:8">Skein-256-256
</a></li></ul></li><li><a href="#g:9">Skein-MAC
</a></li><li><a href="#g:10">Other variants of cryptographic hash functions
</a><ul><li><a href="#g:11">Skein-256-128
</a></li><li><a href="#g:12">Skein-256-160
</a></li><li><a href="#g:13">Skein-256-224
</a></li></ul></li><li><a href="#g:14">Skein-512
</a><ul><li><a href="#g:15">Skein-512-128
</a></li><li><a href="#g:16">Skein-512-160
</a></li><li><a href="#g:17">Skein-512-224
</a></li><li><a href="#g:18">Skein-512-256
</a></li><li><a href="#g:19">Skein-512-384
</a></li></ul></li><li><a href="#g:20">Skein-1024
</a><ul><li><a href="#g:21">Skein-1024-384
</a></li><li><a href="#g:22">Skein-1024-512
</a></li></ul></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p>High-level interface for the Skein family of hash functions.
</p></div></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_512_512">Skein_512_512</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_512_512_Ctx">Skein_512_512_Ctx</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_1024_1024">Skein_1024_1024</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_1024_1024_Ctx">Skein_1024_1024_Ctx</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_256_256">Skein_256_256</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_256_256_Ctx">Skein_256_256_Ctx</a> </li><li class="src short"><span class="keyword">type</span> <a href="#t:Key">Key</a> = <a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString.html#t:ByteString">ByteString</a></li><li class="src short"><a href="#v:skeinMAC">skeinMAC</a> :: (<a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> skeinCtx, <a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> skeinCtx digest) => <a href="Crypto-Skein.html#t:Key">Key</a> -> <a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString-Lazy.html#t:ByteString">ByteString</a> -> digest</li><li class="src short"><a href="#v:skeinMAC-39-">skeinMAC'</a> :: (<a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> skeinCtx, <a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> skeinCtx digest) => <a href="Crypto-Skein.html#t:Key">Key</a> -> <a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString.html#t:ByteString">ByteString</a> -> digest</li><li class="src short"><span class="keyword">class</span> <a href="#t:SkeinMAC">SkeinMAC</a> skeinCtx <span class="keyword">where</span><ul class="subs"><li><a href="#v:skeinMACCtx">skeinMACCtx</a> :: <a href="Crypto-Skein.html#t:Key">Key</a> -> skeinCtx</li></ul></li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_256_128">Skein_256_128</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_256_128_Ctx">Skein_256_128_Ctx</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_256_160">Skein_256_160</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_256_160_Ctx">Skein_256_160_Ctx</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_256_224">Skein_256_224</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_256_224_Ctx">Skein_256_224_Ctx</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_512_128">Skein_512_128</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_512_128_Ctx">Skein_512_128_Ctx</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_512_160">Skein_512_160</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_512_160_Ctx">Skein_512_160_Ctx</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_512_224">Skein_512_224</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_512_224_Ctx">Skein_512_224_Ctx</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_512_256">Skein_512_256</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_512_256_Ctx">Skein_512_256_Ctx</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_512_384">Skein_512_384</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_512_384_Ctx">Skein_512_384_Ctx</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_1024_384">Skein_1024_384</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_1024_384_Ctx">Skein_1024_384_Ctx</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_1024_512">Skein_1024_512</a> </li><li class="src short"><span class="keyword">data</span> <a href="#t:Skein_1024_512_Ctx">Skein_1024_512_Ctx</a> </li></ul></div><div id="interface"><h1 id="g:1">Using this module
</h1><div class="doc"><p>Currently this module provides both Skein as a cryptographic
hash function and Skein as a MAC. This module currently does
not provide some Skein functions, such as tree hashing,
pseudo-random number generation, stream ciphing or key
derivation.
</p><p>Terminology note: we say "message" for your variable-sized
data that is given to Skein.
</p></div><h2 id="g:2">Skein as a cryptographic hash function
</h2><div class="doc"><p>There are many variants of Skein as a cryptographic hash
function. They are called <code>Skein_X_Y</code>, where <code>X</code> is internal
state size in bits and <code>Y</code> is the output size in bits. The
main ones are <code><a href="Crypto-Skein.html#t:Skein_512_512">Skein_512_512</a></code>, <code><a href="Crypto-Skein.html#t:Skein_1024_1024">Skein_1024_1024</a></code> and
<code><a href="Crypto-Skein.html#t:Skein_256_256">Skein_256_256</a></code>. If you are unsure, then use <code><a href="Crypto-Skein.html#t:Skein_512_512">Skein_512_512</a></code>.
</p><p>To use these data types, you have to use <code><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a></code> and
<code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#t:Serialize">Serialize</a></code>. Suppose you wanted to hash a lazy <code><a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString-Lazy.html#t:ByteString">ByteString</a></code>
<code>bs</code>. Then you could use
</p><pre>
digest :: <code><a href="S.html#t:ByteString">ByteString</a></code>
digest = let h = <code><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#v:hash">hash</a></code> bs :: <code><a href="Crypto-Skein.html#t:Skein_512_512">Skein_512_512</a></code>
in <code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#v:encode">encode</a></code> h
</pre><p>where <code><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#v:hash">hash</a></code> is from <a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html">Crypto.Classes</a> (<code>crypto-api</code> package),
<code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#v:encode">encode</a></code> is from <code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#t:Serialize">Serialize</a></code> (<code>cereal</code> package) and <code>digest</code>
is a strict <code><a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString.html#t:ByteString">ByteString</a></code> with the hash. Given that we've
used <code><a href="Crypto-Skein.html#t:Skein_512_512">Skein_512_512</a></code> which has an output size of 512 bits,
<code>digest</code> will have <code>512 / 8 = 64</code> bytes of length.
</p></div><h2 id="g:3">Skein as a message authentication code (MAC)
</h2><div class="doc"><p>If you need a message authentication code (MAC), you may use
HMAC with Skein (e.g. HMAC-Skein-512-512). Using HMAC with
Skein is supported and secure. However, Skein also supports
another secure method, called Skein-MAC.
</p><p>Skein-MAC is as secure as HMAC with Skein, however with a much
lower overhead (especially for short messages). HMAC requires
two hash invocations. Skein-MAC, on the other hand, requires
just one hash invocation after the setup.
</p><p>To use Skein-MAC, you need <code><a href="Crypto-Skein.html#v:skeinMAC">skeinMAC</a></code> (or <code><a href="Crypto-Skein.html#v:skeinMAC-39-">skeinMAC'</a></code>) and
<code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#t:Serialize">Serialize</a></code>. You also need a <code><a href="Crypto-Skein.html#t:Key">Key</a></code> with at least as many bits
as the state size you choose (<code>256</code>, <code>512</code> or <code>1024</code> bits).
</p><p>Suppose you want to use Skein-MAC with <code><a href="Crypto-Skein.html#t:Skein_512_512">Skein_512_512</a></code>. To
setup the MAC function with a <code><a href="Crypto-Skein.html#t:Key">Key</a></code> <code>key</code> (that has at least
<code>512 / 8 = 64</code> bytes), use
</p><pre>
let calcMAC :: <code><a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString-Lazy.html#t:ByteString">ByteString</a></code> -> <code><a href="Crypto-Skein.html#t:Skein_512_512">Skein_512_512</a></code>
calcMAC = <code><a href="Crypto-Skein.html#v:skeinMAC">skeinMAC</a></code> key
</pre><p>It is recommended to partially apply <code><a href="Crypto-Skein.html#v:skeinMAC">skeinMAC</a></code> (or
<code><a href="Crypto-Skein.html#v:skeinMAC-39-">skeinMAC'</a></code>) to avoid recomputing the key setup. We give an
explicit type to <code>calcMAC</code> because we have to choose which
Skein we want.
</p><p>Now, if you want to calculate the Skein-MAC of a lazy
<code><a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString-Lazy.html#t:ByteString">ByteString</a></code> message <code>msg</code>, use
</p><pre>
let msgMAC = <code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#v:encode">encode</a></code> (calcMAC msg)
</pre><p>where <code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#v:encode">encode</a></code> is from <code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#t:Serialize">Serialize</a></code> (<code>cereal</code> package) and
<code>msgMAC</code> is a strict <code><a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString.html#t:ByteString">ByteString</a></code> with the MAC.
</p><p>Now, suppose you are given a <code>msg'</code> with MAC <code>msgMAC'</code> and
want to check the integrity and authenticity of <code>msg'</code>. You
may do so by calculating the MAC of <code>msg'</code> and checking
against <code>msgMAC'</code>:
</p><pre>
let msgMAC'' = <code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#v:encode">encode</a></code> (calcMAC msg')
in if msgMAC' == msgMAC''
then Right "Message is okay"
else Left "Message has been corrupted or tampered with"
</pre></div><h1 id="g:4">About Skein
</h1><div class="doc"><p>From <a href="http://www.skein-hash.info/about">http://www.skein-hash.info/about</a> at 09/2011:
</p><p>Skein is a new family of cryptographic hash functions. Its
design combines speed, security, simplicity, and a great deal
of flexibility in a modular package that is easy to analyze.
</p><p>Skein is fast. Skein-512 -- our primary proposal -- hashes data at
6.1 clock cycles per byte on a 64-bit CPU. This means that on
a 3.1 GHz x64 Core 2 Duo CPU, Skein hashes data at 500
MBytes/second per core -- almost twice as fast as SHA-512 and
three times faster than SHA-256. An optional hash-tree mode
speeds up parallelizable implementations even more. Skein is
fast for short messages, too; Skein-512 hashes short messages
in about 1000 clock cycles.
</p><p>Skein is secure. Our current best attack on Skein-512 is on 25
of 72 rounds, for a safety factor of 2.9. For comparison, at a
similar stage in the standardization process, the AES
encryption algorithm had an attack on 6 of 10 rounds, for a
safety factor of only 1.7. Additionally, Skein has a number of
provably secure properties, increasing confidence in the
algorithm.
</p><p>Skein is simple. Using only three primitive operations, the
Skein compression function can be easily understood and
remembered. The rest of the algorithm is a straightforward
iteration of this function.
</p><p>Skein is flexible. Skein is defined for three different
internal state sizes -- 256 bits, 512 bits, and 1024 bits --
and any output size. This allows Skein to be a drop-in
replacement for the entire SHA family of hash functions. A
completely optional and extendable argument system makes Skein
an efficient tool to use for a very large number of functions:
a PRNG, a stream cipher, a key derivation function,
authentication without the overhead of HMAC, and a
personalization capability. All these features can be
implemented with very low overhead. Together with the
Threefish large-block cipher at Skein core, this design
provides a full set of symmetric cryptographic primitives
suitable for most modern applications.
</p><p>Skein is efficient on a variety of platforms, both hardware
and software. Skein-512 can be implemented in about 200 bytes
of state. Small devices, such as 8-bit smart cards, can
implement Skein-256 using about 100 bytes of memory. Larger
devices can implement the larger versions of Skein to achieve
faster speeds.
</p><p>Skein was designed by a team of highly experienced
cryptographic experts from academia and industry, with
expertise in cryptography, security analysis, software, chip
design, and implementation of real-world cryptographic
systems. This breadth of knowledge allowed them to create a
balanced design that works well in all environments.
</p></div><h1 id="g:5">Main cryptographic hash functions
</h1><div class="doc"><p>These are the main Skein hash functions. Unless you have any
special reasons, you should use one of these.
</p><dl><dt><code><a href="Crypto-Skein.html#t:Skein_512_512">Skein_512_512</a></code></dt><dd> is the primary cryptographic hash function
of this package. It can safely be used for all current
hashing applications, and should remain secure for the
foreseeable future.
</dd><dt><code><a href="Crypto-Skein.html#t:Skein_1024_1024">Skein_1024_1024</a></code></dt><dd> is the ultra-conservative variant. Even
if some future attack managed to break <code><a href="Crypto-Skein.html#t:Skein_512_512">Skein_512_512</a></code>, it
is quite likely that <code><a href="Crypto-Skein.html#t:Skein_1024_1024">Skein_1024_1024</a></code> would remain secure.
</dd><dt><code><a href="Crypto-Skein.html#t:Skein_256_256">Skein_256_256</a></code></dt><dd> is the low-memory variant. It can be
implemented using 100 bytes of RAM, but this is not the case
with this implementation. It is faster than <code><a href="Crypto-Skein.html#t:Skein_512_512">Skein_512_512</a></code>
only for small message lengths, so it's preferable to use
<code><a href="Crypto-Skein.html#t:Skein_512_512">Skein_512_512</a></code>. If you can't afford 512 bits of output,
you may get the speed advantage of <code><a href="Crypto-Skein.html#t:Skein_512_512">Skein_512_512</a></code> by using
<code><a href="Crypto-Skein.html#t:Skein_512_256">Skein_512_256</a></code>.
</dd></dl></div><h2 id="g:6">Skein-512-512
</h2><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_512_512" class="def">Skein_512_512</a> <a href="src/Crypto-Skein.html#Skein_512_512" class="link">Source</a></p><div class="doc"><p>Skein-512-512 hash. You probably want to use <code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#v:encode">encode</a></code> to
obtain a 512-bit (64-byte) <code><a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString.html#t:ByteString">ByteString</a></code>. It's the main Skein
hash function. May be used as a drop-in replacement for
SHA-512 as well.
</p></div><div class="subs instances"><p id="control.i:Skein_512_512" class="caption collapser" onclick="toggleSection('i:Skein_512_512')">Instances</p><div id="section.i:Skein_512_512" class="show"><table><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Eq.html#t:Eq">Eq</a> <a href="Crypto-Skein.html#t:Skein_512_512">Skein_512_512</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Ord.html#t:Ord">Ord</a> <a href="Crypto-Skein.html#t:Skein_512_512">Skein_512_512</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#t:Serialize">Serialize</a> <a href="Crypto-Skein.html#t:Skein_512_512">Skein_512_512</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_512_512_Ctx">Skein_512_512_Ctx</a> <a href="Crypto-Skein.html#t:Skein_512_512">Skein_512_512</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_512_512_Ctx" class="def">Skein_512_512_Ctx</a> <a href="src/Crypto-Skein.html#Skein_512_512_Ctx" class="link">Source</a></p><div class="doc"><p>Context of the Skein-512-512 hash function.
</p></div><div class="subs instances"><p id="control.i:Skein_512_512_Ctx" class="caption collapser" onclick="toggleSection('i:Skein_512_512_Ctx')">Instances</p><div id="section.i:Skein_512_512_Ctx" class="show"><table><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_512_512_Ctx">Skein_512_512_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_512_512_Ctx">Skein_512_512_Ctx</a> <a href="Crypto-Skein.html#t:Skein_512_512">Skein_512_512</a></td><td class="doc empty"> </td></tr></table></div></div></div><h2 id="g:7">Skein-1024-1024
</h2><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_1024_1024" class="def">Skein_1024_1024</a> <a href="src/Crypto-Skein.html#Skein_1024_1024" class="link">Source</a></p><div class="doc"><p>Skein-1024-1024 hash. You probably want to use <code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#v:encode">encode</a></code> to
obtain a 1024-bit (128-byte) <code><a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString.html#t:ByteString">ByteString</a></code>. This is the
ultra-conservative variant. Even if some future attack
managed to break Skein-512, it's quite likely that Skein-1024
would remain secure.
</p></div><div class="subs instances"><p id="control.i:Skein_1024_1024" class="caption collapser" onclick="toggleSection('i:Skein_1024_1024')">Instances</p><div id="section.i:Skein_1024_1024" class="show"><table><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Eq.html#t:Eq">Eq</a> <a href="Crypto-Skein.html#t:Skein_1024_1024">Skein_1024_1024</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Ord.html#t:Ord">Ord</a> <a href="Crypto-Skein.html#t:Skein_1024_1024">Skein_1024_1024</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#t:Serialize">Serialize</a> <a href="Crypto-Skein.html#t:Skein_1024_1024">Skein_1024_1024</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_1024_1024_Ctx">Skein_1024_1024_Ctx</a> <a href="Crypto-Skein.html#t:Skein_1024_1024">Skein_1024_1024</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_1024_1024_Ctx" class="def">Skein_1024_1024_Ctx</a> <a href="src/Crypto-Skein.html#Skein_1024_1024_Ctx" class="link">Source</a></p><div class="doc"><p>Context of the Skein-1024-1024 hash function.
</p></div><div class="subs instances"><p id="control.i:Skein_1024_1024_Ctx" class="caption collapser" onclick="toggleSection('i:Skein_1024_1024_Ctx')">Instances</p><div id="section.i:Skein_1024_1024_Ctx" class="show"><table><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_1024_1024_Ctx">Skein_1024_1024_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_1024_1024_Ctx">Skein_1024_1024_Ctx</a> <a href="Crypto-Skein.html#t:Skein_1024_1024">Skein_1024_1024</a></td><td class="doc empty"> </td></tr></table></div></div></div><h2 id="g:8">Skein-256-256
</h2><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_256_256" class="def">Skein_256_256</a> <a href="src/Crypto-Skein.html#Skein_256_256" class="link">Source</a></p><div class="doc"><p>Skein-256-256 hash. You probably want to use <code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#v:encode">encode</a></code> to
obtain a 256-bit (32-byte) <code><a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString.html#t:ByteString">ByteString</a></code>. Usually it's better
to use <code><a href="Crypto-Skein.html#t:Skein_512_256">Skein_512_256</a></code> (256 bits of output) or <code><a href="Crypto-Skein.html#t:Skein_512_512">Skein_512_512</a></code>
(512 bits of output).
</p></div><div class="subs instances"><p id="control.i:Skein_256_256" class="caption collapser" onclick="toggleSection('i:Skein_256_256')">Instances</p><div id="section.i:Skein_256_256" class="show"><table><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Eq.html#t:Eq">Eq</a> <a href="Crypto-Skein.html#t:Skein_256_256">Skein_256_256</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Ord.html#t:Ord">Ord</a> <a href="Crypto-Skein.html#t:Skein_256_256">Skein_256_256</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#t:Serialize">Serialize</a> <a href="Crypto-Skein.html#t:Skein_256_256">Skein_256_256</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_256_256_Ctx">Skein_256_256_Ctx</a> <a href="Crypto-Skein.html#t:Skein_256_256">Skein_256_256</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_256_256_Ctx" class="def">Skein_256_256_Ctx</a> <a href="src/Crypto-Skein.html#Skein_256_256_Ctx" class="link">Source</a></p><div class="doc"><p>Context of the Skein-256-256 hash function.
</p></div><div class="subs instances"><p id="control.i:Skein_256_256_Ctx" class="caption collapser" onclick="toggleSection('i:Skein_256_256_Ctx')">Instances</p><div id="section.i:Skein_256_256_Ctx" class="show"><table><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_256_256_Ctx">Skein_256_256_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_256_256_Ctx">Skein_256_256_Ctx</a> <a href="Crypto-Skein.html#t:Skein_256_256">Skein_256_256</a></td><td class="doc empty"> </td></tr></table></div></div></div><h1 id="g:9">Skein-MAC
</h1><div class="doc"><p>The standard way to use a hash function for authentication is
to use the HMAC construction. While you may securely use
Skein with HMAC (e.g. HMAC-Skein-512-512), Skein also supports
another mode for MAC. Skein-MAC is as secure as
HMAC-Skein, however faster. Skein-MAC is as fast as
Skein as a hash function, with zero overhead.
</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Key" class="def">Key</a> = <a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString.html#t:ByteString">ByteString</a><a href="src/Crypto-Skein.html#Key" class="link">Source</a></p><div class="doc"><p>Secret key used to calculate the Skein-MAC.
</p><p>The <code><a href="Crypto-Skein.html#t:Key">Key</a></code> may have any length. However, it's recommended to
have at least the same number of bits of the state size. For
example, when using <code><a href="Crypto-Skein.html#v:skeinMAC">skeinMAC</a></code> with <code><a href="Crypto-Skein.html#t:Skein_512_256">Skein_512_256</a></code>, it is
recommended to have a key with at least 64 bytes (512 bits),
which is the state size of <code><a href="Crypto-Skein.html#t:Skein_512_256">Skein_512_256</a></code> (the first of the
two numbers).
</p></div></div><div class="top"><p class="src"><a name="v:skeinMAC" class="def">skeinMAC</a> :: (<a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> skeinCtx, <a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> skeinCtx digest) => <a href="Crypto-Skein.html#t:Key">Key</a> -> <a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString-Lazy.html#t:ByteString">ByteString</a> -> digest<a href="src/Crypto-Skein.html#skeinMAC" class="link">Source</a></p><div class="doc"><p>Calculate the Skein-MAC of a lazy <code><a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString-Lazy.html#t:ByteString">ByteString</a></code> given a
<code><a href="Crypto-Skein.html#t:Key">Key</a></code>. You probably also want to apply <code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#v:encode">encode</a></code> to get a
<code><a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString.html#t:ByteString">ByteString</a></code> out of the <code>digest</code>.
</p><p>This function may be partially applied for increased
performance. Using a partially applied <code>skeinMAC</code> is as fast
as using Skein as a cryptographic hash function. So, instead
of
</p><pre>
let mac1 = skeinMAC key message1
mac2 = skeinMAC key message2
mac3 = skeinMAC key message3
...
</pre><p>write the following code:
</p><pre>
let calcMAC = skeinMAC key
mac1 = calcMAC message1
mac2 = calcMAC message2
mac3 = calcMAC message3
...
</pre><p>This way the key will be processed only once (with
<code><a href="Crypto-Skein.html#v:skeinMACCtx">skeinMACCtx</a></code>).
</p></div></div><div class="top"><p class="src"><a name="v:skeinMAC-39-" class="def">skeinMAC'</a> :: (<a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> skeinCtx, <a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> skeinCtx digest) => <a href="Crypto-Skein.html#t:Key">Key</a> -> <a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString.html#t:ByteString">ByteString</a> -> digest<a href="src/Crypto-Skein.html#skeinMAC%27" class="link">Source</a></p><div class="doc"><p>Same as <code><a href="Crypto-Skein.html#v:skeinMAC">skeinMAC</a></code>, however using a strict <code><a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString.html#t:ByteString">ByteString</a></code>.
Should be faster for small <code><a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString.html#t:ByteString">ByteString</a></code><code>s</code>.
</p></div></div><div class="top"><p class="src"><span class="keyword">class</span> <a name="t:SkeinMAC" class="def">SkeinMAC</a> skeinCtx <span class="keyword">where</span><a href="src/Crypto-Skein.html#SkeinMAC" class="link">Source</a></p><div class="doc"><p>Class of Skein contexts that may be used for Skein-MAC (all
of them). Included here mostly for documentation purposes,
since adding new instances is not safe (functions using
<code><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a></code> unsurprisingly assume that they are using Skein).
</p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:skeinMACCtx" class="def">skeinMACCtx</a> :: <a href="Crypto-Skein.html#t:Key">Key</a> -> skeinCtx<a href="src/Crypto-Skein.html#skeinMACCtx" class="link">Source</a></p><div class="doc"><p>Construct a context <code>skeinCtx</code> given a <code><a href="Crypto-Skein.html#t:Key">Key</a></code>. This
context may be used with the usual <code><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a></code> interface to
obtain a message authentication code (MAC).
</p><p>For a simpler interface, see <code><a href="Crypto-Skein.html#v:skeinMAC">skeinMAC</a></code> and <code><a href="Crypto-Skein.html#v:skeinMAC-39-">skeinMAC'</a></code>.
</p></div></div><div class="subs instances"><p id="control.i:SkeinMAC" class="caption collapser" onclick="toggleSection('i:SkeinMAC')">Instances</p><div id="section.i:SkeinMAC" class="show"><table><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_1024_1024_Ctx">Skein_1024_1024_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_1024_512_Ctx">Skein_1024_512_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_1024_384_Ctx">Skein_1024_384_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_512_512_Ctx">Skein_512_512_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_512_384_Ctx">Skein_512_384_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_512_256_Ctx">Skein_512_256_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_512_224_Ctx">Skein_512_224_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_512_160_Ctx">Skein_512_160_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_512_128_Ctx">Skein_512_128_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_256_256_Ctx">Skein_256_256_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_256_224_Ctx">Skein_256_224_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_256_160_Ctx">Skein_256_160_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_256_128_Ctx">Skein_256_128_Ctx</a></td><td class="doc empty"> </td></tr></table></div></div></div><h1 id="g:10">Other variants of cryptographic hash functions
</h1><div class="doc"><p>These hash functions produce less output bits than their state
size. For example, <code><a href="Crypto-Skein.html#t:Skein_512_160">Skein_512_160</a></code> produces 160 output bits
while having 512 bits of state size. Their main use is to be
a drop-in replacement to legacy hash functions. If you don't
have any special reason for using them, use one of the main
hash functions above (e.g. <code><a href="Crypto-Skein.html#t:Skein_512_512">Skein_512_512</a></code>).
</p><p>You may replace:
</p><dl><dt>MD5</dt><dd> with <code><a href="Crypto-Skein.html#t:Skein_256_128">Skein_256_128</a></code> or <code><a href="Crypto-Skein.html#t:Skein_512_128">Skein_512_128</a></code>.
</dd><dt>SHA-1</dt><dd> with <code><a href="Crypto-Skein.html#t:Skein_256_160">Skein_256_160</a></code> or <code><a href="Crypto-Skein.html#t:Skein_512_160">Skein_512_160</a></code>.
</dd><dt>SHA-224</dt><dd> with <code><a href="Crypto-Skein.html#t:Skein_256_224">Skein_256_224</a></code> or <code><a href="Crypto-Skein.html#t:Skein_512_224">Skein_512_224</a></code>.
</dd><dt>SHA-256</dt><dd> with <code><a href="Crypto-Skein.html#t:Skein_256_256">Skein_256_256</a></code> or <code><a href="Crypto-Skein.html#t:Skein_512_256">Skein_512_256</a></code>.
</dd><dt>SHA-384</dt><dd> with <code><a href="Crypto-Skein.html#t:Skein_512_384">Skein_512_384</a></code> or <code><a href="Crypto-Skein.html#t:Skein_1024_384">Skein_1024_384</a></code>.
</dd><dt>SHA-512</dt><dd> with <code><a href="Crypto-Skein.html#t:Skein_512_512">Skein_512_512</a></code> or <code><a href="Crypto-Skein.html#t:Skein_1024_512">Skein_1024_512</a></code>.
</dd></dl></div><h2 id="g:11">Skein-256-128
</h2><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_256_128" class="def">Skein_256_128</a> <a href="src/Crypto-Skein.html#Skein_256_128" class="link">Source</a></p><div class="doc"><p>Skein-256-128 hash. You probably want to use <code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#v:encode">encode</a></code> to
obtain a 128-bit (16-byte) <code><a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString.html#t:ByteString">ByteString</a></code>. May be used as a
drop-in replacement for MD5.
</p></div><div class="subs instances"><p id="control.i:Skein_256_128" class="caption collapser" onclick="toggleSection('i:Skein_256_128')">Instances</p><div id="section.i:Skein_256_128" class="show"><table><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Eq.html#t:Eq">Eq</a> <a href="Crypto-Skein.html#t:Skein_256_128">Skein_256_128</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Ord.html#t:Ord">Ord</a> <a href="Crypto-Skein.html#t:Skein_256_128">Skein_256_128</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#t:Serialize">Serialize</a> <a href="Crypto-Skein.html#t:Skein_256_128">Skein_256_128</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_256_128_Ctx">Skein_256_128_Ctx</a> <a href="Crypto-Skein.html#t:Skein_256_128">Skein_256_128</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_256_128_Ctx" class="def">Skein_256_128_Ctx</a> <a href="src/Crypto-Skein.html#Skein_256_128_Ctx" class="link">Source</a></p><div class="doc"><p>Context of the Skein-256-128 hash function.
</p></div><div class="subs instances"><p id="control.i:Skein_256_128_Ctx" class="caption collapser" onclick="toggleSection('i:Skein_256_128_Ctx')">Instances</p><div id="section.i:Skein_256_128_Ctx" class="show"><table><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_256_128_Ctx">Skein_256_128_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_256_128_Ctx">Skein_256_128_Ctx</a> <a href="Crypto-Skein.html#t:Skein_256_128">Skein_256_128</a></td><td class="doc empty"> </td></tr></table></div></div></div><h2 id="g:12">Skein-256-160
</h2><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_256_160" class="def">Skein_256_160</a> <a href="src/Crypto-Skein.html#Skein_256_160" class="link">Source</a></p><div class="doc"><p>Skein-256-160 hash. You probably want to use <code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#v:encode">encode</a></code> to
obtain a 160-bit (20-byte) <code><a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString.html#t:ByteString">ByteString</a></code>. May be used as a
drop-in replacement for SHA-1.
</p></div><div class="subs instances"><p id="control.i:Skein_256_160" class="caption collapser" onclick="toggleSection('i:Skein_256_160')">Instances</p><div id="section.i:Skein_256_160" class="show"><table><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Eq.html#t:Eq">Eq</a> <a href="Crypto-Skein.html#t:Skein_256_160">Skein_256_160</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Ord.html#t:Ord">Ord</a> <a href="Crypto-Skein.html#t:Skein_256_160">Skein_256_160</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#t:Serialize">Serialize</a> <a href="Crypto-Skein.html#t:Skein_256_160">Skein_256_160</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_256_160_Ctx">Skein_256_160_Ctx</a> <a href="Crypto-Skein.html#t:Skein_256_160">Skein_256_160</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_256_160_Ctx" class="def">Skein_256_160_Ctx</a> <a href="src/Crypto-Skein.html#Skein_256_160_Ctx" class="link">Source</a></p><div class="doc"><p>Context of the Skein-256-160 hash function.
</p></div><div class="subs instances"><p id="control.i:Skein_256_160_Ctx" class="caption collapser" onclick="toggleSection('i:Skein_256_160_Ctx')">Instances</p><div id="section.i:Skein_256_160_Ctx" class="show"><table><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_256_160_Ctx">Skein_256_160_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_256_160_Ctx">Skein_256_160_Ctx</a> <a href="Crypto-Skein.html#t:Skein_256_160">Skein_256_160</a></td><td class="doc empty"> </td></tr></table></div></div></div><h2 id="g:13">Skein-256-224
</h2><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_256_224" class="def">Skein_256_224</a> <a href="src/Crypto-Skein.html#Skein_256_224" class="link">Source</a></p><div class="doc"><p>Skein-256-224 hash. You probably want to use <code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#v:encode">encode</a></code> to
obtain a 224-bit (28-byte) <code><a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString.html#t:ByteString">ByteString</a></code>. May be used as a
drop-in replacement for SHA-224.
</p></div><div class="subs instances"><p id="control.i:Skein_256_224" class="caption collapser" onclick="toggleSection('i:Skein_256_224')">Instances</p><div id="section.i:Skein_256_224" class="show"><table><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Eq.html#t:Eq">Eq</a> <a href="Crypto-Skein.html#t:Skein_256_224">Skein_256_224</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Ord.html#t:Ord">Ord</a> <a href="Crypto-Skein.html#t:Skein_256_224">Skein_256_224</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#t:Serialize">Serialize</a> <a href="Crypto-Skein.html#t:Skein_256_224">Skein_256_224</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_256_224_Ctx">Skein_256_224_Ctx</a> <a href="Crypto-Skein.html#t:Skein_256_224">Skein_256_224</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_256_224_Ctx" class="def">Skein_256_224_Ctx</a> <a href="src/Crypto-Skein.html#Skein_256_224_Ctx" class="link">Source</a></p><div class="doc"><p>Context of the Skein-256-224 hash function.
</p></div><div class="subs instances"><p id="control.i:Skein_256_224_Ctx" class="caption collapser" onclick="toggleSection('i:Skein_256_224_Ctx')">Instances</p><div id="section.i:Skein_256_224_Ctx" class="show"><table><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_256_224_Ctx">Skein_256_224_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_256_224_Ctx">Skein_256_224_Ctx</a> <a href="Crypto-Skein.html#t:Skein_256_224">Skein_256_224</a></td><td class="doc empty"> </td></tr></table></div></div></div><h1 id="g:14">Skein-512
</h1><h2 id="g:15">Skein-512-128
</h2><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_512_128" class="def">Skein_512_128</a> <a href="src/Crypto-Skein.html#Skein_512_128" class="link">Source</a></p><div class="doc"><p>Skein-512-128 hash. You probably want to use <code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#v:encode">encode</a></code> to
obtain a 128-bit (16-byte) <code><a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString.html#t:ByteString">ByteString</a></code>. May be used as a
drop-in replacement for MD5.
</p></div><div class="subs instances"><p id="control.i:Skein_512_128" class="caption collapser" onclick="toggleSection('i:Skein_512_128')">Instances</p><div id="section.i:Skein_512_128" class="show"><table><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Eq.html#t:Eq">Eq</a> <a href="Crypto-Skein.html#t:Skein_512_128">Skein_512_128</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Ord.html#t:Ord">Ord</a> <a href="Crypto-Skein.html#t:Skein_512_128">Skein_512_128</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#t:Serialize">Serialize</a> <a href="Crypto-Skein.html#t:Skein_512_128">Skein_512_128</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_512_128_Ctx">Skein_512_128_Ctx</a> <a href="Crypto-Skein.html#t:Skein_512_128">Skein_512_128</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_512_128_Ctx" class="def">Skein_512_128_Ctx</a> <a href="src/Crypto-Skein.html#Skein_512_128_Ctx" class="link">Source</a></p><div class="doc"><p>Context of the Skein-512-128 hash function.
</p></div><div class="subs instances"><p id="control.i:Skein_512_128_Ctx" class="caption collapser" onclick="toggleSection('i:Skein_512_128_Ctx')">Instances</p><div id="section.i:Skein_512_128_Ctx" class="show"><table><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_512_128_Ctx">Skein_512_128_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_512_128_Ctx">Skein_512_128_Ctx</a> <a href="Crypto-Skein.html#t:Skein_512_128">Skein_512_128</a></td><td class="doc empty"> </td></tr></table></div></div></div><h2 id="g:16">Skein-512-160
</h2><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_512_160" class="def">Skein_512_160</a> <a href="src/Crypto-Skein.html#Skein_512_160" class="link">Source</a></p><div class="doc"><p>Skein-512-160 hash. You probably want to use <code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#v:encode">encode</a></code> to
obtain a 160-bit (20-byte) <code><a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString.html#t:ByteString">ByteString</a></code>. May be used as a
drop-in replacement for SHA-1.
</p></div><div class="subs instances"><p id="control.i:Skein_512_160" class="caption collapser" onclick="toggleSection('i:Skein_512_160')">Instances</p><div id="section.i:Skein_512_160" class="show"><table><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Eq.html#t:Eq">Eq</a> <a href="Crypto-Skein.html#t:Skein_512_160">Skein_512_160</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Ord.html#t:Ord">Ord</a> <a href="Crypto-Skein.html#t:Skein_512_160">Skein_512_160</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#t:Serialize">Serialize</a> <a href="Crypto-Skein.html#t:Skein_512_160">Skein_512_160</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_512_160_Ctx">Skein_512_160_Ctx</a> <a href="Crypto-Skein.html#t:Skein_512_160">Skein_512_160</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_512_160_Ctx" class="def">Skein_512_160_Ctx</a> <a href="src/Crypto-Skein.html#Skein_512_160_Ctx" class="link">Source</a></p><div class="doc"><p>Context of the Skein-512-160 hash function.
</p></div><div class="subs instances"><p id="control.i:Skein_512_160_Ctx" class="caption collapser" onclick="toggleSection('i:Skein_512_160_Ctx')">Instances</p><div id="section.i:Skein_512_160_Ctx" class="show"><table><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_512_160_Ctx">Skein_512_160_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_512_160_Ctx">Skein_512_160_Ctx</a> <a href="Crypto-Skein.html#t:Skein_512_160">Skein_512_160</a></td><td class="doc empty"> </td></tr></table></div></div></div><h2 id="g:17">Skein-512-224
</h2><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_512_224" class="def">Skein_512_224</a> <a href="src/Crypto-Skein.html#Skein_512_224" class="link">Source</a></p><div class="doc"><p>Skein-512-224 hash. You probably want to use <code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#v:encode">encode</a></code> to
obtain a 224-bit (28-byte) <code><a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString.html#t:ByteString">ByteString</a></code>. May be used as a drop-in replacement for SHA-224.
</p></div><div class="subs instances"><p id="control.i:Skein_512_224" class="caption collapser" onclick="toggleSection('i:Skein_512_224')">Instances</p><div id="section.i:Skein_512_224" class="show"><table><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Eq.html#t:Eq">Eq</a> <a href="Crypto-Skein.html#t:Skein_512_224">Skein_512_224</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Ord.html#t:Ord">Ord</a> <a href="Crypto-Skein.html#t:Skein_512_224">Skein_512_224</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#t:Serialize">Serialize</a> <a href="Crypto-Skein.html#t:Skein_512_224">Skein_512_224</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_512_224_Ctx">Skein_512_224_Ctx</a> <a href="Crypto-Skein.html#t:Skein_512_224">Skein_512_224</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_512_224_Ctx" class="def">Skein_512_224_Ctx</a> <a href="src/Crypto-Skein.html#Skein_512_224_Ctx" class="link">Source</a></p><div class="doc"><p>Context of the Skein-512-224 hash function.
</p></div><div class="subs instances"><p id="control.i:Skein_512_224_Ctx" class="caption collapser" onclick="toggleSection('i:Skein_512_224_Ctx')">Instances</p><div id="section.i:Skein_512_224_Ctx" class="show"><table><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_512_224_Ctx">Skein_512_224_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_512_224_Ctx">Skein_512_224_Ctx</a> <a href="Crypto-Skein.html#t:Skein_512_224">Skein_512_224</a></td><td class="doc empty"> </td></tr></table></div></div></div><h2 id="g:18">Skein-512-256
</h2><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_512_256" class="def">Skein_512_256</a> <a href="src/Crypto-Skein.html#Skein_512_256" class="link">Source</a></p><div class="doc"><p>Skein-512-256 hash. You probably want to use <code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#v:encode">encode</a></code> to
obtain a 256-bit (32-byte) <code><a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString.html#t:ByteString">ByteString</a></code>.
</p></div><div class="subs instances"><p id="control.i:Skein_512_256" class="caption collapser" onclick="toggleSection('i:Skein_512_256')">Instances</p><div id="section.i:Skein_512_256" class="show"><table><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Eq.html#t:Eq">Eq</a> <a href="Crypto-Skein.html#t:Skein_512_256">Skein_512_256</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Ord.html#t:Ord">Ord</a> <a href="Crypto-Skein.html#t:Skein_512_256">Skein_512_256</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#t:Serialize">Serialize</a> <a href="Crypto-Skein.html#t:Skein_512_256">Skein_512_256</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_512_256_Ctx">Skein_512_256_Ctx</a> <a href="Crypto-Skein.html#t:Skein_512_256">Skein_512_256</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_512_256_Ctx" class="def">Skein_512_256_Ctx</a> <a href="src/Crypto-Skein.html#Skein_512_256_Ctx" class="link">Source</a></p><div class="doc"><p>Context of the Skein-512-256 hash function.
</p></div><div class="subs instances"><p id="control.i:Skein_512_256_Ctx" class="caption collapser" onclick="toggleSection('i:Skein_512_256_Ctx')">Instances</p><div id="section.i:Skein_512_256_Ctx" class="show"><table><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_512_256_Ctx">Skein_512_256_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_512_256_Ctx">Skein_512_256_Ctx</a> <a href="Crypto-Skein.html#t:Skein_512_256">Skein_512_256</a></td><td class="doc empty"> </td></tr></table></div></div></div><h2 id="g:19">Skein-512-384
</h2><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_512_384" class="def">Skein_512_384</a> <a href="src/Crypto-Skein.html#Skein_512_384" class="link">Source</a></p><div class="doc"><p>Skein-512-384 hash. You probably want to use <code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#v:encode">encode</a></code> to
obtain a 384-bit (48-byte) <code><a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString.html#t:ByteString">ByteString</a></code>. May be used as a
drop-in replacement for SHA-384.
</p></div><div class="subs instances"><p id="control.i:Skein_512_384" class="caption collapser" onclick="toggleSection('i:Skein_512_384')">Instances</p><div id="section.i:Skein_512_384" class="show"><table><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Eq.html#t:Eq">Eq</a> <a href="Crypto-Skein.html#t:Skein_512_384">Skein_512_384</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Ord.html#t:Ord">Ord</a> <a href="Crypto-Skein.html#t:Skein_512_384">Skein_512_384</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#t:Serialize">Serialize</a> <a href="Crypto-Skein.html#t:Skein_512_384">Skein_512_384</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_512_384_Ctx">Skein_512_384_Ctx</a> <a href="Crypto-Skein.html#t:Skein_512_384">Skein_512_384</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_512_384_Ctx" class="def">Skein_512_384_Ctx</a> <a href="src/Crypto-Skein.html#Skein_512_384_Ctx" class="link">Source</a></p><div class="doc"><p>Context of the Skein-512-384 hash function.
</p></div><div class="subs instances"><p id="control.i:Skein_512_384_Ctx" class="caption collapser" onclick="toggleSection('i:Skein_512_384_Ctx')">Instances</p><div id="section.i:Skein_512_384_Ctx" class="show"><table><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_512_384_Ctx">Skein_512_384_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_512_384_Ctx">Skein_512_384_Ctx</a> <a href="Crypto-Skein.html#t:Skein_512_384">Skein_512_384</a></td><td class="doc empty"> </td></tr></table></div></div></div><h1 id="g:20">Skein-1024
</h1><h2 id="g:21">Skein-1024-384
</h2><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_1024_384" class="def">Skein_1024_384</a> <a href="src/Crypto-Skein.html#Skein_1024_384" class="link">Source</a></p><div class="doc"><p>Skein-1024-384 hash. You probably want to use <code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#v:encode">encode</a></code> to
obtain a 384-bit (48-byte) <code><a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString.html#t:ByteString">ByteString</a></code>. May be used as a
drop-in replacement for SHA-384.
</p></div><div class="subs instances"><p id="control.i:Skein_1024_384" class="caption collapser" onclick="toggleSection('i:Skein_1024_384')">Instances</p><div id="section.i:Skein_1024_384" class="show"><table><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Eq.html#t:Eq">Eq</a> <a href="Crypto-Skein.html#t:Skein_1024_384">Skein_1024_384</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Ord.html#t:Ord">Ord</a> <a href="Crypto-Skein.html#t:Skein_1024_384">Skein_1024_384</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#t:Serialize">Serialize</a> <a href="Crypto-Skein.html#t:Skein_1024_384">Skein_1024_384</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_1024_384_Ctx">Skein_1024_384_Ctx</a> <a href="Crypto-Skein.html#t:Skein_1024_384">Skein_1024_384</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_1024_384_Ctx" class="def">Skein_1024_384_Ctx</a> <a href="src/Crypto-Skein.html#Skein_1024_384_Ctx" class="link">Source</a></p><div class="doc"><p>Context of the Skein-1024-384 hash function.
</p></div><div class="subs instances"><p id="control.i:Skein_1024_384_Ctx" class="caption collapser" onclick="toggleSection('i:Skein_1024_384_Ctx')">Instances</p><div id="section.i:Skein_1024_384_Ctx" class="show"><table><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_1024_384_Ctx">Skein_1024_384_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_1024_384_Ctx">Skein_1024_384_Ctx</a> <a href="Crypto-Skein.html#t:Skein_1024_384">Skein_1024_384</a></td><td class="doc empty"> </td></tr></table></div></div></div><h2 id="g:22">Skein-1024-512
</h2><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_1024_512" class="def">Skein_1024_512</a> <a href="src/Crypto-Skein.html#Skein_1024_512" class="link">Source</a></p><div class="doc"><p>Skein-1024-512 hash. You probably want to use <code><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#v:encode">encode</a></code> to
obtain a 512-bit (64-byte) <code><a href="/usr/share/doc/ghc-doc/html/libraries/bytestring-0.9.2.1/Data-ByteString.html#t:ByteString">ByteString</a></code>. May be used as a
drop-in replacement for SHA-512.
</p></div><div class="subs instances"><p id="control.i:Skein_1024_512" class="caption collapser" onclick="toggleSection('i:Skein_1024_512')">Instances</p><div id="section.i:Skein_1024_512" class="show"><table><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Eq.html#t:Eq">Eq</a> <a href="Crypto-Skein.html#t:Skein_1024_512">Skein_1024_512</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/ghc-doc/html/libraries/base-4.5.0.0/Data-Ord.html#t:Ord">Ord</a> <a href="Crypto-Skein.html#t:Skein_1024_512">Skein_1024_512</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-cereal-doc/html/Data-Serialize.html#t:Serialize">Serialize</a> <a href="Crypto-Skein.html#t:Skein_1024_512">Skein_1024_512</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_1024_512_Ctx">Skein_1024_512_Ctx</a> <a href="Crypto-Skein.html#t:Skein_1024_512">Skein_1024_512</a></td><td class="doc empty"> </td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span> <a name="t:Skein_1024_512_Ctx" class="def">Skein_1024_512_Ctx</a> <a href="src/Crypto-Skein.html#Skein_1024_512_Ctx" class="link">Source</a></p><div class="doc"><p>Context of the Skein-1024-512 hash function.
</p></div><div class="subs instances"><p id="control.i:Skein_1024_512_Ctx" class="caption collapser" onclick="toggleSection('i:Skein_1024_512_Ctx')">Instances</p><div id="section.i:Skein_1024_512_Ctx" class="show"><table><tr><td class="src"><a href="Crypto-Skein.html#t:SkeinMAC">SkeinMAC</a> <a href="Crypto-Skein.html#t:Skein_1024_512_Ctx">Skein_1024_512_Ctx</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a href="/usr/share/doc/libghc-crypto-api-doc/html/Crypto-Classes.html#t:Hash">Hash</a> <a href="Crypto-Skein.html#t:Skein_1024_512_Ctx">Skein_1024_512_Ctx</a> <a href="Crypto-Skein.html#t:Skein_1024_512">Skein_1024_512</a></td><td class="doc empty"> </td></tr></table></div></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.10.0</p></div></body></html>
|