module Crypto.Secp256k1.Internal where import Crypto.Secp256k1.Prim import Data.ByteString (ByteString) import qualified Data.ByteString as BS import qualified Data.ByteString.Unsafe as BU import Foreign (Ptr, castPtr) import Foreign.C (CSize) unsafeUseByteString :: ByteString -> ((Ptr a, CSize) -> IO b) -> IO b unsafeUseByteString :: forall a b. ByteString -> ((Ptr a, CSize) -> IO b) -> IO b unsafeUseByteString ByteString bs (Ptr a, CSize) -> IO b f = ByteString -> (CStringLen -> IO b) -> IO b forall a. ByteString -> (CStringLen -> IO a) -> IO a BU.unsafeUseAsCStringLen ByteString bs ((CStringLen -> IO b) -> IO b) -> (CStringLen -> IO b) -> IO b forall a b. (a -> b) -> a -> b $ \(Ptr CChar b, Int l) -> (Ptr a, CSize) -> IO b f (Ptr CChar -> Ptr a forall a b. Ptr a -> Ptr b castPtr Ptr CChar b, Int -> CSize forall a b. (Integral a, Num b) => a -> b fromIntegral Int l) useByteString :: ByteString -> ((Ptr a, CSize) -> IO b) -> IO b useByteString :: forall a b. ByteString -> ((Ptr a, CSize) -> IO b) -> IO b useByteString ByteString bs (Ptr a, CSize) -> IO b f = ByteString -> (CStringLen -> IO b) -> IO b forall a. ByteString -> (CStringLen -> IO a) -> IO a BS.useAsCStringLen ByteString bs ((CStringLen -> IO b) -> IO b) -> (CStringLen -> IO b) -> IO b forall a b. (a -> b) -> a -> b $ \(Ptr CChar b, Int l) -> (Ptr a, CSize) -> IO b f (Ptr CChar -> Ptr a forall a b. Ptr a -> Ptr b castPtr Ptr CChar b, Int -> CSize forall a b. (Integral a, Num b) => a -> b fromIntegral Int l) unsafePackByteString :: (Ptr a, CSize) -> IO ByteString unsafePackByteString :: forall a. (Ptr a, CSize) -> IO ByteString unsafePackByteString (Ptr a b, CSize l) = CStringLen -> IO ByteString BU.unsafePackMallocCStringLen (Ptr a -> Ptr CChar forall a b. Ptr a -> Ptr b castPtr Ptr a b, CSize -> Int forall a b. (Integral a, Num b) => a -> b fromIntegral CSize l) packByteString :: (Ptr a, CSize) -> IO ByteString packByteString :: forall a. (Ptr a, CSize) -> IO ByteString packByteString (Ptr a b, CSize l) = CStringLen -> IO ByteString BS.packCStringLen (Ptr a -> Ptr CChar forall a b. Ptr a -> Ptr b castPtr Ptr a b, CSize -> Int forall a b. (Integral a, Num b) => a -> b fromIntegral CSize l) isSuccess :: Ret -> Bool isSuccess :: Ret -> Bool isSuccess Ret 0 = Bool False isSuccess Ret 1 = Bool True isSuccess Ret n = [Char] -> Bool forall a. HasCallStack => [Char] -> a error ([Char] -> Bool) -> [Char] -> Bool forall a b. (a -> b) -> a -> b $ [Char] "isSuccess expected 0 or 1 but got " [Char] -> [Char] -> [Char] forall a. [a] -> [a] -> [a] ++ Ret -> [Char] forall a. Show a => a -> [Char] show Ret n