module Crypto.Secp256k1.Internal where import Crypto.Secp256k1.Prim import qualified Data.ByteArray.Encoding as BA 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 encodeBase16 :: ByteString -> ByteString encodeBase16 :: ByteString -> ByteString encodeBase16 = Base -> ByteString -> ByteString forall bin bout. (ByteArrayAccess bin, ByteArray bout) => Base -> bin -> bout BA.convertToBase Base BA.Base16 decodeBase16 :: ByteString -> Either String ByteString decodeBase16 :: ByteString -> Either [Char] ByteString decodeBase16 = Base -> ByteString -> Either [Char] ByteString forall bin bout. (ByteArrayAccess bin, ByteArray bout) => Base -> bin -> Either [Char] bout BA.convertFromBase Base BA.Base16