module NaCl.Auth
( Key
, toKey
, Authenticator
, toAuthenticator
, create
, verify
) where
import Data.ByteArray (ByteArray, ByteArrayAccess)
import System.IO.Unsafe (unsafePerformIO)
import NaCl.Auth.Internal (Key, Authenticator, toAuthenticator, toKey)
import qualified NaCl.Auth.Internal as I
create
:: ( ByteArray authBytes
, ByteArrayAccess keyBytes
, ByteArrayAccess msg
)
=> Key keyBytes
-> msg
-> Authenticator authBytes
create :: Key keyBytes -> msg -> Authenticator authBytes
create Key keyBytes
key msg
msg = do
IO (Authenticator authBytes) -> Authenticator authBytes
forall a. IO a -> a
unsafePerformIO (IO (Authenticator authBytes) -> Authenticator authBytes)
-> IO (Authenticator authBytes) -> Authenticator authBytes
forall a b. (a -> b) -> a -> b
$ Key keyBytes -> msg -> IO (Authenticator authBytes)
forall keyBytes msg authBytes.
(ByteArrayAccess keyBytes, ByteArrayAccess msg,
ByteArray authBytes) =>
Key keyBytes -> msg -> IO (Authenticator authBytes)
I.create Key keyBytes
key msg
msg
verify
:: ( ByteArrayAccess authBytes
, ByteArrayAccess msg
, ByteArrayAccess keyBytes
)
=> Key keyBytes
-> msg
-> Authenticator authBytes
-> Bool
verify :: Key keyBytes -> msg -> Authenticator authBytes -> Bool
verify Key keyBytes
key msg
msg Authenticator authBytes
auth = do
IO Bool -> Bool
forall a. IO a -> a
unsafePerformIO (IO Bool -> Bool) -> IO Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Key keyBytes -> msg -> Authenticator authBytes -> IO Bool
forall keyBytes msg authBytes.
(ByteArrayAccess keyBytes, ByteArrayAccess msg,
ByteArrayAccess authBytes) =>
Key keyBytes -> msg -> Authenticator authBytes -> IO Bool
I.verify Key keyBytes
key msg
msg Authenticator authBytes
auth