module Data.OpenPGP.Internal where
import Data.Word
import Data.Bits
decode_s2k_count :: Word8 -> Word32
decode_s2k_count c = (16 + (fromIntegral c .&. 15)) `shiftL`
((fromIntegral c `shiftR` 4) + 6)
encode_s2k_count :: Word32 -> Word8
encode_s2k_count iterations
| iterations >= 65011712 = 255
| decode_s2k_count result < iterations = result+1
| otherwise = result
where
result = fromIntegral $ (fromIntegral c `shiftL` 4) .|. (count 16)
(count, c) = encode_s2k_count' (iterations `shiftR` 6) (0::Word8)
encode_s2k_count' count c
| count < 32 = (count, c)
| otherwise = encode_s2k_count' (count `shiftR` 1) (c+1)