         ] each
     ] unless ;
 
-: uint-array-cast-le ( byte-array -- uint-array )
-    byte-array>le uint cast-array ;
-
-HINTS: uint-array-cast-le byte-array ;
-
-: uint-array>byte-array-le ( uint-array -- byte-array )
-    underlying>> byte-array>le ;
-
-HINTS: uint-array>byte-array-le uint-array ;
-
-M: md5-state checksum-block ( block state -- )
+HINTS: byte-array>le byte-array ;
+
+M: md5-state checksum-block
     [
-        [ uint-array-cast-le ] [ state>> ] bi* {
+        [ byte-array>le uint cast-array ] [ state>> ] bi* {
             [ (process-md5-block-F) ]
             [ (process-md5-block-G) ]
             [ (process-md5-block-H) ]

        [ d a b c 13 S12 14 ]
        [ c d a b 14 S13 15 ]
        [ b c d a 15 S14 16 ]
    } [ F ] with-md5-round ;

: (process-md5-block-G) ( block state -- )
    {


INSTANCE: md5 stream-checksum

TUPLE: md5-state < checksum-state
{ state uint-array }
{ old-state uint-array } ;

: <md5-state> ( -- md5 )
    md5-state new-checksum-state
