2 % (c) The GRASP/AQUA Project, Glasgow University, 1998
4 \section[md5]{MD5: Message-digest}
6 This module provides basic MD5 support for Haskell, using
7 Colin Plumb's C implementation of MD5 to do the Hard Work.
10 {-# OPTIONS -#include "cbits/md5.h" #-}
13 digest -- :: String -> IO String
14 , digestPS -- :: PackedString -> IO (ByteArray Int)
25 digest :: String -> IO String
27 ps <- stToIO (packStringST str)
29 let (ByteArray _ _ ba#) = ba
33 | n# ==# 0# = return []
35 let ch# = indexCharArray# ba# i#
36 ls <- baToString ba# (n# -# 1#) (i# +# 1#)
39 digestPS :: PackedString -> IO (ByteArray Int)
41 ctxt <- stToIO (newCharArray (0::Int,``sizeof(struct MD5Context)''::Int))
45 then _ccall_ MD5Update ctxt (psToCString ps) len
46 else _ccall_ MD5Update ctxt (psToByteArray ps) len)
47 dig <- stToIO (newCharArray (0::Int,16*(``sizeof(unsigned char)''::Int)))
48 _ccall_ MD5Final dig ctxt
49 stToIO (unsafeFreezeByteArray dig)