Hi,<div><br></div><div>I use Botan in an iOS app (Disk Decipher, <a href="http://disk-decipher.hekkihek.nl">http://disk-decipher.hekkihek.nl</a>), feel free to add a ref to the Known Users page.</div><div><br></div><div>To support <a href="http://www.truecrypt.org/docs/?s=keyfiles-technical-details">TrueCrypt key files</a> (step 7.c.i), the app needs access to the intermediate state. Since it might be useful to others too, I attach the (almost trivial) patch below.</div>
<div><br></div><div>Also, I have made a few objects wrapping iOS's SHA functions into subclasses of Botan::HashFunction. Since Botan does not have ARM assembly versions, these are much (10x) faster than the default SHA implementation provided by Botan. If anybody is interested, I'll gladly provide a zip file containing the sources.</div>
<div><br></div><div>Regards, Richard.</div><div><br></div><div><div><font class="Apple-style-span" face="'courier new', monospace">*** src/checksum/crc32/crc32.h.orig     2012-06-17 20:50:48.000000000 +0200</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">--- src/checksum/crc32/crc32.h  2012-07-29 12:33:39.000000000 +0200</font></div><div><font class="Apple-style-span" face="'courier new', monospace">***************</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">*** 23,28 ****</font></div><div><font class="Apple-style-span" face="'courier new', monospace">--- 23,29 ----</font></div><div><font class="Apple-style-span" face="'courier new', monospace">        HashFunction* clone() const { return new CRC32; }</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">  </font></div><div><font class="Apple-style-span" face="'courier new', monospace">        void clear() { crc = 0xFFFFFFFF; }</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">+       void intermediate(byte[]);</font></div><div><font class="Apple-style-span" face="'courier new', monospace">  </font></div><div><font class="Apple-style-span" face="'courier new', monospace">        CRC32() { clear(); }</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">        ~CRC32() { clear(); }</font></div><div><font class="Apple-style-span" face="'courier new', monospace">*** src/checksum/crc32/crc32.cpp.orig   2012-06-17 20:50:48.000000000 +0200</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">--- src/checksum/crc32/crc32.cpp        2012-07-29 12:36:25.000000000 +0200</font></div><div><font class="Apple-style-span" face="'courier new', monospace">***************</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">*** 99,102 ****</font></div><div><font class="Apple-style-span" face="'courier new', monospace">--- 99,110 ----</font></div><div><font class="Apple-style-span" face="'courier new', monospace">     clear();</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">     }</font></div><div><font class="Apple-style-span" face="'courier new', monospace">  </font></div><div><font class="Apple-style-span" face="'courier new', monospace">+ /*</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">+ * Intermediate CRC32 Checksum</font></div><div><font class="Apple-style-span" face="'courier new', monospace">+ */</font></div><div><font class="Apple-style-span" face="'courier new', monospace">+ void CRC32::intermediate(byte output[])</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">+    {</font></div><div><font class="Apple-style-span" face="'courier new', monospace">+    store_be(crc, output);</font></div><div><font class="Apple-style-span" face="'courier new', monospace">+    }</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">+ </font></div><div><font class="Apple-style-span" face="'courier new', monospace">  }</font></div></div><div><br></div>