yql-0.0.0: src/YQL/Crypto.hs
module YQL.Crypto
( decodeBase64
, encodeBase64
, encodeMd5
, encodeMd5Hex
, encodeSha
, uuid
, encodeHmacSHA1
, encodeHmacSHA256 ) where
import Control.Monad.IO.Class (liftIO)
import qualified Crypto.Hash.MD5 as MD5
import qualified Crypto.Hash.SHA1 as SHA1
import qualified Data.ByteString.Base64.Lazy as Base64
import Data.ByteString.Lazy
import qualified Data.Digest.Pure.SHA as SHA
import qualified Data.UUID as UUID (toLazyASCIIBytes)
import qualified Data.UUID.V4 as UUID
import Data.YQL (YQLM)
decodeBase64 :: ByteString -> Maybe ByteString
decodeBase64 s = either (const Nothing) Just (Base64.decode s)
encodeBase64 :: ByteString -> ByteString
encodeBase64 s = Base64.encode s
encodeHmacSHA1 :: ByteString -> ByteString -> ByteString
encodeHmacSHA1 secret plaintext =
SHA.bytestringDigest $ SHA.hmacSha1 secret plaintext
encodeHmacSHA256 :: ByteString -> ByteString -> ByteString
encodeHmacSHA256 secret plaintext =
SHA.bytestringDigest $ SHA.hmacSha256 secret plaintext
encodeMd5 :: ByteString -> ByteString
encodeMd5 message = fromStrict . MD5.hash . toStrict $ message
encodeMd5Hex :: ByteString -> ByteString
encodeMd5Hex = undefined
encodeSha :: ByteString -> ByteString
encodeSha message = fromStrict . SHA1.hash . toStrict $ message
uuid :: YQLM ByteString
uuid = liftIO $ UUID.nextRandom >>= return . UUID.toLazyASCIIBytes