[Fencommits] fenserve: allocate less in sha1_add_ws

Benja Fallenstein benja.fallenstein at gmail.com
Sat Mar 31 21:12:11 EEST 2007


Sat Mar 31 21:11:53 EEST 2007  Benja Fallenstein <benja.fallenstein at gmail.com>
  * allocate less in sha1_add_ws
diff -rN -u old-fenserve/SHA1.hs new-fenserve/SHA1.hs
--- old-fenserve/SHA1.hs	2007-03-31 21:12:10.000000000 +0300
+++ new-fenserve/SHA1.hs	2007-03-31 21:12:10.000000000 +0300
@@ -71,6 +71,8 @@
 type XYZ = (Word32, Word32, Word32)
 type Rotation = Int
 
+type Arr s = STUArray s Int Word32
+
 sha1 :: ByteString -> String
 sha1 s = s5
  where s1_2 = sha1_step_1_2_pad_length s
@@ -109,8 +111,6 @@
 sha1_step_4_main abcde s = runST st where
     st = newArray (0,79) 0 >>= sha1_step_4_work abcde s 0
 
-type Arr s = STUArray s Int Word32
-
 abcseq :: ABCDE -> a -> a
 abcseq (a,b,c,d,e) x = a `seq` b `seq` c `seq` d `seq` e `seq` x
 
@@ -144,9 +144,11 @@
 
 sha1_add_ws :: Int -> Arr s -> ST s ()
 sha1_add_ws 80 arr = return ()
-sha1_add_ws n arr = do w1234 <- mapM (\i -> readArray arr (n-i)) [3,8,14,16]
-                       writeArray arr n $ rotL (foldr1 xor w1234) 1 
-                       sha1_add_ws (n+1) arr
+sha1_add_ws n arr = do
+    w1 <- readArray arr (n-3);  w2 <- readArray arr (n-8)
+    w3 <- readArray arr (n-14); w4 <- readArray arr (n-16)
+    writeArray arr n $ rotL (w1 `xor` w2 `xor` w3 `xor` w4) 1 
+    sha1_add_ws (n+1) arr
 
 fold_arr :: (ABCDE -> Word32 -> ABCDE) -> ABCDE -> Arr s -> (Int,Int) -> 
             ST s ABCDE
@@ -171,4 +173,3 @@
 
 rotL :: Word32 -> Rotation -> Word32
 rotL a s = shiftL a s .|. shiftL a (s-32)
-




More information about the Fencommits mailing list