module Util.Crypto where import Crypto.KDF.Argon2 import Crypto.Error (CryptoFailable) import qualified Data.ByteString as BS import Data.ByteString.Base64 import System.Random.Stateful (uniformByteStringM, newIOGenM, initStdGen) randomString :: IO BS.ByteString randomString = encode <$> (uniformByteStringM 32 =<< newIOGenM =<< initStdGen) argon2 :: BS.ByteString -> BS.ByteString -> CryptoFailable BS.ByteString argon2 salt payload = encode <$> hash defaultOptions payload (decodeLenient salt) 64