-- -- Haskell version of MD5 example from the C# blog entry: -- http://blogs.msdn.com/csharpfaq/archive/2006/10/09/How-do-I-calculate-a-MD5-hash-from-a-string_3F00_.aspx -- module MD5 where import NET import Data.Word import Numeric calcMD5FromString :: String -> IO String calcMD5FromString str = do md <- invokeStatic "System.Security.Cryptography.MD5" "Create" () fi <- getFieldStatic "System.Text.Encoding" "ASCII" () bs <- fi # invoke "GetBytes" str vec <- md # invoke "ComputeHash" (bs :: Vector Word8) res <- vec # bytesToString let resStr = foldr (showHex) "" res return resStr bytesToString :: Vector Word8 -> IO [Word8] bytesToString vec = do len <- vec # getField "Length" () mapM (\ i -> do x <- vec # invoke "GetValue" (i::Int) return (x::Word8)) [0..((len::Int)-1)]