[add SHA1 routines hashToBytes and sha1Bytes to work on [Word8]
John Meacham <john@repetae.net>**20070629225635] hunk ./Util/SHA1.hs 28
-module Util.SHA1 (sha1file,sha1Handle,ABCDE(..),Hash,emptyHash) where
+module Util.SHA1 (sha1file,sha1Bytes,hashToBytes,sha1Handle,ABCDE(..),Hash,emptyHash) where
hunk ./Util/SHA1.hs 46
+sha1Bytes :: [Word8] -> Hash
+sha1Bytes ss = unsafePerformIO $ do
+    let len = length ss
+        plen = sha1_step_1_2_plength len
+    allocaBytes plen $ \ptr -> do
+    pokeArray ptr ss
+    let num_nuls = (55 - len) `mod` 64
+    pokeArray (advancePtr ptr len) ((128:replicate num_nuls 0)++(reverse $ size_split 8 (fromIntegral len*8)))
+    let abcde = sha1_step_3_init
+    let ptr' = castPtr ptr
+    unless big_endian $ fiddle_endianness ptr' plen
+    res <- sha1_step_4_main abcde ptr' plen
+    return res
+
+
hunk ./Util/SHA1.hs 243
+hashToBytes :: Hash -> [Word8]
+hashToBytes (ABCDE a b c d e) = tb a . tb b . tb c . tb d . tb e $ [] where
+    tb :: Word32 -> [Word8] -> [Word8]
+    tb n = showIt 4 n
+    showIt :: Int -> Word32 -> [Word8] -> [Word8]
+    showIt 0 _ r = r
+    showIt i x r = case quotRem x 256 of
+                       (y, z) -> let c = fromIntegral z
+                                 in c `seq` showIt (i-1) y (c:r)
+
+