[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