{-
  Copyright (c) Meta Platforms, Inc. and affiliates.
  All rights reserved.

  This source code is licensed under the BSD-style license found in the
  LICENSE file in the root directory of this source tree.
-}

module Util.MD5 (md5) where

import GHC.Fingerprint
import Data.ByteString (ByteString)
import Data.ByteString.Unsafe
import Data.Text
import System.IO.Unsafe
import Foreign

import Util.Text

md5 :: ByteString -> Text
md5 bs =
  unsafeDupablePerformIO $
    unsafeUseAsCStringLen bs $ \(ptr,len) ->
      textShow <$> fingerprintData (castPtr ptr) (fromIntegral len)