libsecp256k1-0.0.2: src/Crypto/Secp256k1/Internal.hs
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 bs f =
BU.unsafeUseAsCStringLen bs $ \(b, l) ->
f (castPtr b, fromIntegral l)
useByteString :: ByteString -> ((Ptr a, CSize) -> IO b) -> IO b
useByteString bs f =
BS.useAsCStringLen bs $ \(b, l) ->
f (castPtr b, fromIntegral l)
unsafePackByteString :: (Ptr a, CSize) -> IO ByteString
unsafePackByteString (b, l) =
BU.unsafePackMallocCStringLen (castPtr b, fromIntegral l)
packByteString :: (Ptr a, CSize) -> IO ByteString
packByteString (b, l) =
BS.packCStringLen (castPtr b, fromIntegral l)
isSuccess :: Ret -> Bool
isSuccess 0 = False
isSuccess 1 = True
isSuccess n = error $ "isSuccess expected 0 or 1 but got " ++ show n