{-# LINE 1 "src/Crypto/BLST/Internal/Bindings.chs" #-}
{-# OPTIONS_HADDOCK not-home #-}
{-# OPTIONS_GHC -Wno-orphans #-}
module Crypto.BLST.Internal.Bindings
( module Crypto.BLST.Internal.Bindings
, module Crypto.BLST.Internal.Bindings.Types
) where
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.Ptr as C2HSImp
import Prelude hiding (length)
import Control.Exception (Exception, catch, throwIO)
import Data.ByteArray (ByteArrayAccess(..), Bytes, ScrubbedBytes)
import Data.ByteArray qualified as BA
import Data.ByteArray.Sized (SizedByteArray)
import Data.ByteArray.Sized qualified as AS
import Foreign.Marshal.Utils (fromBool, toBool)
import Foreign.Ptr (nullPtr)
import Crypto.BLST.Internal.Bindings.Types
type instance SizeOf (Point 'P1) = 144
{-# LINE 32 "src/Crypto/BLST/Internal/Bindings.chs" #-}
type instance SizeOf (Point 'P2) = 288
{-# LINE 33 "src/Crypto/BLST/Internal/Bindings.chs" #-}
type instance SizeOf (Affine 'P1) = 96
{-# LINE 35 "src/Crypto/BLST/Internal/Bindings.chs" #-}
type instance SizeOf (Affine 'P2) = 192
{-# LINE 36 "src/Crypto/BLST/Internal/Bindings.chs" #-}
type instance SizeOf Scalar = 32
{-# LINE 38 "src/Crypto/BLST/Internal/Bindings.chs" #-}
data BlstError = BlstSuccess
| BlstBadEncoding
| BlstPointNotOnCurve
| BlstPointNotInGroup
| BlstAggrTypeMismatch
| BlstVerifyFail
| BlstPkIsInfinity
| BlstBadScalar
instance Enum BlstError where
succ BlstSuccess = BlstBadEncoding
succ BlstBadEncoding = BlstPointNotOnCurve
succ BlstPointNotOnCurve = BlstPointNotInGroup
succ BlstPointNotInGroup = BlstAggrTypeMismatch
succ BlstAggrTypeMismatch = BlstVerifyFail
succ BlstVerifyFail = BlstPkIsInfinity
succ BlstPkIsInfinity = BlstBadScalar
succ BlstBadScalar = error "BlstError.succ: BlstBadScalar has no successor"
pred BlstBadEncoding = BlstSuccess
pred BlstPointNotOnCurve = BlstBadEncoding
pred BlstPointNotInGroup = BlstPointNotOnCurve
pred BlstAggrTypeMismatch = BlstPointNotInGroup
pred BlstVerifyFail = BlstAggrTypeMismatch
pred BlstPkIsInfinity = BlstVerifyFail
pred BlstBadScalar = BlstPkIsInfinity
pred BlstSuccess = error "BlstError.pred: BlstSuccess has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from BlstBadScalar
fromEnum BlstSuccess = 0
fromEnum BlstBadEncoding = 1
fromEnum BlstPointNotOnCurve = 2
fromEnum BlstPointNotInGroup = 3
fromEnum BlstAggrTypeMismatch = 4
fromEnum BlstVerifyFail = 5
fromEnum BlstPkIsInfinity = 6
fromEnum BlstBadScalar = 7
toEnum 0 = BlstSuccess
toEnum 1 = BlstBadEncoding
toEnum 2 = BlstPointNotOnCurve
toEnum 3 = BlstPointNotInGroup
toEnum 4 = BlstAggrTypeMismatch
toEnum 5 = BlstVerifyFail
toEnum 6 = BlstPkIsInfinity
toEnum 7 = BlstBadScalar
toEnum unmatched = error ("BlstError.toEnum: Cannot match " ++ show unmatched)
{-# LINE 41 "src/Crypto/BLST/Internal/Bindings.chs" #-}
deriving stock instance Eq BlstError
deriving stock instance Bounded BlstError
deriving stock instance Show BlstError
instance Exception BlstError
keygen :: ByteArrayAccess ba => ba -> IO Scalar
keygen bytes = fmap Scalar $
AS.create $ \ptr ->
withByteArray bytes $ \bytes' ->
blst_keygen ptr bytes' (fromIntegral $ length bytes) nullPtr 0
skToPkInG1 :: Scalar -> IO (Point 'P1)
skToPkInG1 (Scalar sk) = fmap Point $
AS.create $ \ptr ->
withByteArray sk $ \sk' ->
blst_sk_to_pk_in_g1 ptr sk'
skToPkInG2 :: Scalar -> IO (Point 'P2)
skToPkInG2 (Scalar sk) = fmap Point $
AS.create $ \ptr ->
withByteArray sk $ \sk' ->
blst_sk_to_pk_in_g2 ptr sk'
signPkInG1 :: Point 'P2 -> Scalar -> IO (Point 'P2)
signPkInG1 (Point p2) (Scalar sc) = fmap Point $
AS.create $ \ptr ->
withByteArray sc $ \sc' ->
withByteArray p2 $ \p2' ->
blst_sign_pk_in_g1 ptr p2' sc'
signPkInG2 :: Point 'P1 -> Scalar -> IO (Point 'P1)
signPkInG2 (Point p1) (Scalar sc) = fmap Point $
AS.create $ \ptr ->
withByteArray sc $ \sc' ->
withByteArray p1 $ \p1' ->
blst_sign_pk_in_g2 ptr p1' sc'
encodeToG1 :: (ByteArrayAccess ba, ByteArrayAccess ba2) => ba -> Maybe ba2 -> IO (Point 'P1)
encodeToG1 msg dst = fmap Point $
AS.create $ \ptr ->
withByteArray msg $ \msg' ->
maybe ($ nullPtr) withByteArray dst $ \dst' ->
blst_encode_to_g1 ptr msg' (fromIntegral $ length msg)
dst' (maybe 0 (fromIntegral . length) dst) nullPtr 0
hashToG1 :: (ByteArrayAccess ba, ByteArrayAccess ba2) => ba -> Maybe ba2 -> IO (Point 'P1)
hashToG1 :: forall ba ba2.
(ByteArrayAccess ba, ByteArrayAccess ba2) =>
ba -> Maybe ba2 -> IO (Point 'P1)
hashToG1 ba
msg Maybe ba2
dst = (SizedByteArray 144 Bytes -> Point 'P1)
-> IO (SizedByteArray 144 Bytes) -> IO (Point 'P1)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap SizedByteArray 144 Bytes -> Point 'P1
SizedByteArray (SizeOf (Point 'P1)) Bytes -> Point 'P1
forall (a :: PointKind).
SizedByteArray (SizeOf (Point a)) Bytes -> Point a
Point (IO (SizedByteArray 144 Bytes) -> IO (Point 'P1))
-> IO (SizedByteArray 144 Bytes) -> IO (Point 'P1)
forall a b. (a -> b) -> a -> b
$
(Ptr () -> IO ()) -> IO (SizedByteArray 144 Bytes)
forall (n :: Nat) ba p.
(ByteArrayN n ba, KnownNat n) =>
(Ptr p -> IO ()) -> IO ba
AS.create ((Ptr () -> IO ()) -> IO (SizedByteArray 144 Bytes))
-> (Ptr () -> IO ()) -> IO (SizedByteArray 144 Bytes)
forall a b. (a -> b) -> a -> b
$ \Ptr ()
ptr ->
ba -> (Ptr CUChar -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. ba -> (Ptr p -> IO a) -> IO a
withByteArray ba
msg ((Ptr CUChar -> IO ()) -> IO ()) -> (Ptr CUChar -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
msg' ->
((Ptr CUChar -> IO ()) -> IO ())
-> (ba2 -> (Ptr CUChar -> IO ()) -> IO ())
-> Maybe ba2
-> (Ptr CUChar -> IO ())
-> IO ()
forall b a. b -> (a -> b) -> Maybe a -> b
maybe ((Ptr CUChar -> IO ()) -> Ptr CUChar -> IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CUChar
forall a. Ptr a
nullPtr) ba2 -> (Ptr CUChar -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. ba2 -> (Ptr p -> IO a) -> IO a
withByteArray Maybe ba2
dst ((Ptr CUChar -> IO ()) -> IO ()) -> (Ptr CUChar -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
dst' ->
Ptr ()
-> Ptr CUChar
-> CULong
-> Ptr CUChar
-> CULong
-> Ptr CUChar
-> CULong
-> IO ()
blst_hash_to_g1 Ptr ()
ptr Ptr CUChar
msg' (Int -> CULong
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CULong) -> Int -> CULong
forall a b. (a -> b) -> a -> b
$ ba -> Int
forall ba. ByteArrayAccess ba => ba -> Int
length ba
msg)
Ptr CUChar
dst' (CULong -> (ba2 -> CULong) -> Maybe ba2 -> CULong
forall b a. b -> (a -> b) -> Maybe a -> b
maybe CULong
0 (Int -> CULong
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CULong) -> (ba2 -> Int) -> ba2 -> CULong
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ba2 -> Int
forall ba. ByteArrayAccess ba => ba -> Int
length) Maybe ba2
dst) Ptr CUChar
forall a. Ptr a
nullPtr CULong
0
encodeToG2 :: (ByteArrayAccess ba, ByteArrayAccess ba2) => ba -> Maybe ba2 -> IO (Point 'P2)
encodeToG2 :: forall ba ba2.
(ByteArrayAccess ba, ByteArrayAccess ba2) =>
ba -> Maybe ba2 -> IO (Point 'P2)
encodeToG2 ba
msg Maybe ba2
dst = (SizedByteArray 288 Bytes -> Point 'P2)
-> IO (SizedByteArray 288 Bytes) -> IO (Point 'P2)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap SizedByteArray 288 Bytes -> Point 'P2
SizedByteArray (SizeOf (Point 'P2)) Bytes -> Point 'P2
forall (a :: PointKind).
SizedByteArray (SizeOf (Point a)) Bytes -> Point a
Point (IO (SizedByteArray 288 Bytes) -> IO (Point 'P2))
-> IO (SizedByteArray 288 Bytes) -> IO (Point 'P2)
forall a b. (a -> b) -> a -> b
$
(Ptr () -> IO ()) -> IO (SizedByteArray 288 Bytes)
forall (n :: Nat) ba p.
(ByteArrayN n ba, KnownNat n) =>
(Ptr p -> IO ()) -> IO ba
AS.create ((Ptr () -> IO ()) -> IO (SizedByteArray 288 Bytes))
-> (Ptr () -> IO ()) -> IO (SizedByteArray 288 Bytes)
forall a b. (a -> b) -> a -> b
$ \Ptr ()
ptr ->
ba -> (Ptr CUChar -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. ba -> (Ptr p -> IO a) -> IO a
withByteArray ba
msg ((Ptr CUChar -> IO ()) -> IO ()) -> (Ptr CUChar -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
msg' ->
((Ptr CUChar -> IO ()) -> IO ())
-> (ba2 -> (Ptr CUChar -> IO ()) -> IO ())
-> Maybe ba2
-> (Ptr CUChar -> IO ())
-> IO ()
forall b a. b -> (a -> b) -> Maybe a -> b
maybe ((Ptr CUChar -> IO ()) -> Ptr CUChar -> IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CUChar
forall a. Ptr a
nullPtr) ba2 -> (Ptr CUChar -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. ba2 -> (Ptr p -> IO a) -> IO a
withByteArray Maybe ba2
dst ((Ptr CUChar -> IO ()) -> IO ()) -> (Ptr CUChar -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
dst' ->
Ptr ()
-> Ptr CUChar
-> CULong
-> Ptr CUChar
-> CULong
-> Ptr CUChar
-> CULong
-> IO ()
blst_encode_to_g2 Ptr ()
ptr Ptr CUChar
msg' (Int -> CULong
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CULong) -> Int -> CULong
forall a b. (a -> b) -> a -> b
$ ba -> Int
forall ba. ByteArrayAccess ba => ba -> Int
length ba
msg)
Ptr CUChar
dst' (CULong -> (ba2 -> CULong) -> Maybe ba2 -> CULong
forall b a. b -> (a -> b) -> Maybe a -> b
maybe CULong
0 (Int -> CULong
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CULong) -> (ba2 -> Int) -> ba2 -> CULong
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ba2 -> Int
forall ba. ByteArrayAccess ba => ba -> Int
length) Maybe ba2
dst) Ptr CUChar
forall a. Ptr a
nullPtr CULong
0
hashToG2 :: (ByteArrayAccess ba, ByteArrayAccess ba2) => ba -> Maybe ba2 -> IO (Point 'P2)
hashToG2 :: forall ba ba2.
(ByteArrayAccess ba, ByteArrayAccess ba2) =>
ba -> Maybe ba2 -> IO (Point 'P2)
hashToG2 ba
msg Maybe ba2
dst = (SizedByteArray 288 Bytes -> Point 'P2)
-> IO (SizedByteArray 288 Bytes) -> IO (Point 'P2)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap SizedByteArray 288 Bytes -> Point 'P2
SizedByteArray (SizeOf (Point 'P2)) Bytes -> Point 'P2
forall (a :: PointKind).
SizedByteArray (SizeOf (Point a)) Bytes -> Point a
Point (IO (SizedByteArray 288 Bytes) -> IO (Point 'P2))
-> IO (SizedByteArray 288 Bytes) -> IO (Point 'P2)
forall a b. (a -> b) -> a -> b
$
(Ptr () -> IO ()) -> IO (SizedByteArray 288 Bytes)
forall (n :: Nat) ba p.
(ByteArrayN n ba, KnownNat n) =>
(Ptr p -> IO ()) -> IO ba
AS.create ((Ptr () -> IO ()) -> IO (SizedByteArray 288 Bytes))
-> (Ptr () -> IO ()) -> IO (SizedByteArray 288 Bytes)
forall a b. (a -> b) -> a -> b
$ \Ptr ()
ptr ->
ba -> (Ptr CUChar -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. ba -> (Ptr p -> IO a) -> IO a
withByteArray ba
msg ((Ptr CUChar -> IO ()) -> IO ()) -> (Ptr CUChar -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
msg' ->
((Ptr CUChar -> IO ()) -> IO ())
-> (ba2 -> (Ptr CUChar -> IO ()) -> IO ())
-> Maybe ba2
-> (Ptr CUChar -> IO ())
-> IO ()
forall b a. b -> (a -> b) -> Maybe a -> b
maybe ((Ptr CUChar -> IO ()) -> Ptr CUChar -> IO ()
forall a b. (a -> b) -> a -> b
$ Ptr CUChar
forall a. Ptr a
nullPtr) ba2 -> (Ptr CUChar -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. ba2 -> (Ptr p -> IO a) -> IO a
withByteArray Maybe ba2
dst ((Ptr CUChar -> IO ()) -> IO ()) -> (Ptr CUChar -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
dst' ->
Ptr ()
-> Ptr CUChar
-> CULong
-> Ptr CUChar
-> CULong
-> Ptr CUChar
-> CULong
-> IO ()
blst_hash_to_g2 Ptr ()
ptr Ptr CUChar
msg' (Int -> CULong
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CULong) -> Int -> CULong
forall a b. (a -> b) -> a -> b
$ ba -> Int
forall ba. ByteArrayAccess ba => ba -> Int
length ba
msg)
Ptr CUChar
dst' (CULong -> (ba2 -> CULong) -> Maybe ba2 -> CULong
forall b a. b -> (a -> b) -> Maybe a -> b
maybe CULong
0 (Int -> CULong
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CULong) -> (ba2 -> Int) -> ba2 -> CULong
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ba2 -> Int
forall ba. ByteArrayAccess ba => ba -> Int
length) Maybe ba2
dst) Ptr CUChar
forall a. Ptr a
nullPtr CULong
0
coreVerifyPkInG1
:: (ByteArrayAccess ba, ByteArrayAccess ba2)
=> Affine 'P1
-> Affine 'P2
-> EncodeMethod
-> ba
-> Maybe ba2
-> IO BlstError
coreVerifyPkInG1 :: forall ba ba2.
(ByteArrayAccess ba, ByteArrayAccess ba2) =>
Affine 'P1
-> Affine 'P2 -> EncodeMethod -> ba -> Maybe ba2 -> IO BlstError
coreVerifyPkInG1 (Affine SizedByteArray (SizeOf (Affine 'P1)) Bytes
pk) (Affine SizedByteArray (SizeOf (Affine 'P2)) Bytes
sig) EncodeMethod
hoe ba
msg Maybe ba2
dst = (CInt -> BlstError) -> IO CInt -> IO BlstError
forall a b. (a -> b) -> IO a -> IO b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap (Int -> BlstError
forall a. Enum a => Int -> a
toEnum (Int -> BlstError) -> (CInt -> Int) -> CInt -> BlstError
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral) (IO CInt -> IO BlstError) -> IO CInt -> IO BlstError
forall a b. (a -> b) -> a -> b
$
SizedByteArray 96 Bytes -> (Ptr () -> IO CInt) -> IO CInt
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 96 Bytes -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 96 Bytes
SizedByteArray (SizeOf (Affine 'P1)) Bytes
pk ((Ptr () -> IO CInt) -> IO CInt) -> (Ptr () -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr ()
pk' ->
SizedByteArray 192 Bytes -> (Ptr () -> IO CInt) -> IO CInt
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 192 Bytes -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 192 Bytes
SizedByteArray (SizeOf (Affine 'P2)) Bytes
sig ((Ptr () -> IO CInt) -> IO CInt) -> (Ptr () -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr ()
sig' ->
ba -> (Ptr CUChar -> IO CInt) -> IO CInt
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. ba -> (Ptr p -> IO a) -> IO a
withByteArray ba
msg ((Ptr CUChar -> IO CInt) -> IO CInt)
-> (Ptr CUChar -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
msg' ->
((Ptr CUChar -> IO CInt) -> IO CInt)
-> (ba2 -> (Ptr CUChar -> IO CInt) -> IO CInt)
-> Maybe ba2
-> (Ptr CUChar -> IO CInt)
-> IO CInt
forall b a. b -> (a -> b) -> Maybe a -> b
maybe ((Ptr CUChar -> IO CInt) -> Ptr CUChar -> IO CInt
forall a b. (a -> b) -> a -> b
$ Ptr CUChar
forall a. Ptr a
nullPtr) ba2 -> (Ptr CUChar -> IO CInt) -> IO CInt
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. ba2 -> (Ptr p -> IO a) -> IO a
withByteArray Maybe ba2
dst ((Ptr CUChar -> IO CInt) -> IO CInt)
-> (Ptr CUChar -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
dst' ->
Ptr ()
-> Ptr ()
-> CUChar
-> Ptr CUChar
-> CULong
-> Ptr CUChar
-> CULong
-> Ptr CUChar
-> CULong
-> IO CInt
blst_core_verify_pk_in_g1 Ptr ()
pk' Ptr ()
sig' (Int -> CUChar
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CUChar) -> Int -> CUChar
forall a b. (a -> b) -> a -> b
$ EncodeMethod -> Int
forall a. Enum a => a -> Int
fromEnum EncodeMethod
hoe)
Ptr CUChar
msg' (Int -> CULong
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CULong) -> Int -> CULong
forall a b. (a -> b) -> a -> b
$ ba -> Int
forall ba. ByteArrayAccess ba => ba -> Int
length ba
msg)
Ptr CUChar
dst' (CULong -> (ba2 -> CULong) -> Maybe ba2 -> CULong
forall b a. b -> (a -> b) -> Maybe a -> b
maybe CULong
0 (Int -> CULong
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CULong) -> (ba2 -> Int) -> ba2 -> CULong
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ba2 -> Int
forall ba. ByteArrayAccess ba => ba -> Int
length) Maybe ba2
dst)
Ptr CUChar
forall a. Ptr a
nullPtr CULong
0
coreVerifyPkInG2
:: (ByteArrayAccess ba, ByteArrayAccess ba2)
=> Affine 'P2
-> Affine 'P1
-> EncodeMethod
-> ba
-> Maybe ba2
-> IO BlstError
coreVerifyPkInG2 :: forall ba ba2.
(ByteArrayAccess ba, ByteArrayAccess ba2) =>
Affine 'P2
-> Affine 'P1 -> EncodeMethod -> ba -> Maybe ba2 -> IO BlstError
coreVerifyPkInG2 (Affine SizedByteArray (SizeOf (Affine 'P2)) Bytes
pk) (Affine SizedByteArray (SizeOf (Affine 'P1)) Bytes
sig) EncodeMethod
hoe ba
msg Maybe ba2
dst = (CInt -> BlstError) -> IO CInt -> IO BlstError
forall a b. (a -> b) -> IO a -> IO b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap (Int -> BlstError
forall a. Enum a => Int -> a
toEnum (Int -> BlstError) -> (CInt -> Int) -> CInt -> BlstError
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral) (IO CInt -> IO BlstError) -> IO CInt -> IO BlstError
forall a b. (a -> b) -> a -> b
$
SizedByteArray 192 Bytes -> (Ptr () -> IO CInt) -> IO CInt
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 192 Bytes -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 192 Bytes
SizedByteArray (SizeOf (Affine 'P2)) Bytes
pk ((Ptr () -> IO CInt) -> IO CInt) -> (Ptr () -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr ()
pk' ->
SizedByteArray 96 Bytes -> (Ptr () -> IO CInt) -> IO CInt
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 96 Bytes -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 96 Bytes
SizedByteArray (SizeOf (Affine 'P1)) Bytes
sig ((Ptr () -> IO CInt) -> IO CInt) -> (Ptr () -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr ()
sig' ->
ba -> (Ptr CUChar -> IO CInt) -> IO CInt
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. ba -> (Ptr p -> IO a) -> IO a
withByteArray ba
msg ((Ptr CUChar -> IO CInt) -> IO CInt)
-> (Ptr CUChar -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
msg' ->
((Ptr CUChar -> IO CInt) -> IO CInt)
-> (ba2 -> (Ptr CUChar -> IO CInt) -> IO CInt)
-> Maybe ba2
-> (Ptr CUChar -> IO CInt)
-> IO CInt
forall b a. b -> (a -> b) -> Maybe a -> b
maybe ((Ptr CUChar -> IO CInt) -> Ptr CUChar -> IO CInt
forall a b. (a -> b) -> a -> b
$ Ptr CUChar
forall a. Ptr a
nullPtr) ba2 -> (Ptr CUChar -> IO CInt) -> IO CInt
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. ba2 -> (Ptr p -> IO a) -> IO a
withByteArray Maybe ba2
dst ((Ptr CUChar -> IO CInt) -> IO CInt)
-> (Ptr CUChar -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
dst' ->
Ptr ()
-> Ptr ()
-> CUChar
-> Ptr CUChar
-> CULong
-> Ptr CUChar
-> CULong
-> Ptr CUChar
-> CULong
-> IO CInt
blst_core_verify_pk_in_g2 Ptr ()
pk' Ptr ()
sig' (Int -> CUChar
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CUChar) -> Int -> CUChar
forall a b. (a -> b) -> a -> b
$ EncodeMethod -> Int
forall a. Enum a => a -> Int
fromEnum EncodeMethod
hoe)
Ptr CUChar
msg' (Int -> CULong
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CULong) -> Int -> CULong
forall a b. (a -> b) -> a -> b
$ ba -> Int
forall ba. ByteArrayAccess ba => ba -> Int
length ba
msg)
Ptr CUChar
dst' (CULong -> (ba2 -> CULong) -> Maybe ba2 -> CULong
forall b a. b -> (a -> b) -> Maybe a -> b
maybe CULong
0 (Int -> CULong
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CULong) -> (ba2 -> Int) -> ba2 -> CULong
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ba2 -> Int
forall ba. ByteArrayAccess ba => ba -> Int
length) Maybe ba2
dst)
Ptr CUChar
forall a. Ptr a
nullPtr CULong
0
p1ToAffine :: Point 'P1 -> IO (Affine 'P1)
p1ToAffine :: Point 'P1 -> IO (Affine 'P1)
p1ToAffine (Point SizedByteArray (SizeOf (Point 'P1)) Bytes
p1) = (SizedByteArray 96 Bytes -> Affine 'P1)
-> IO (SizedByteArray 96 Bytes) -> IO (Affine 'P1)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap SizedByteArray 96 Bytes -> Affine 'P1
SizedByteArray (SizeOf (Affine 'P1)) Bytes -> Affine 'P1
forall (a :: PointKind).
SizedByteArray (SizeOf (Affine a)) Bytes -> Affine a
Affine (IO (SizedByteArray 96 Bytes) -> IO (Affine 'P1))
-> IO (SizedByteArray 96 Bytes) -> IO (Affine 'P1)
forall a b. (a -> b) -> a -> b
$
(Ptr () -> IO ()) -> IO (SizedByteArray 96 Bytes)
forall (n :: Nat) ba p.
(ByteArrayN n ba, KnownNat n) =>
(Ptr p -> IO ()) -> IO ba
AS.create ((Ptr () -> IO ()) -> IO (SizedByteArray 96 Bytes))
-> (Ptr () -> IO ()) -> IO (SizedByteArray 96 Bytes)
forall a b. (a -> b) -> a -> b
$ \Ptr ()
ptr ->
SizedByteArray 144 Bytes -> (Ptr () -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 144 Bytes -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 144 Bytes
SizedByteArray (SizeOf (Point 'P1)) Bytes
p1 ((Ptr () -> IO ()) -> IO ()) -> (Ptr () -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr ()
p1' ->
Ptr () -> Ptr () -> IO ()
blst_p1_to_affine Ptr ()
ptr Ptr ()
p1'
p2ToAffine :: Point 'P2 -> IO (Affine 'P2)
p2ToAffine :: Point 'P2 -> IO (Affine 'P2)
p2ToAffine (Point SizedByteArray (SizeOf (Point 'P2)) Bytes
p2) = (SizedByteArray 192 Bytes -> Affine 'P2)
-> IO (SizedByteArray 192 Bytes) -> IO (Affine 'P2)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap SizedByteArray 192 Bytes -> Affine 'P2
SizedByteArray (SizeOf (Affine 'P2)) Bytes -> Affine 'P2
forall (a :: PointKind).
SizedByteArray (SizeOf (Affine a)) Bytes -> Affine a
Affine (IO (SizedByteArray 192 Bytes) -> IO (Affine 'P2))
-> IO (SizedByteArray 192 Bytes) -> IO (Affine 'P2)
forall a b. (a -> b) -> a -> b
$
(Ptr () -> IO ()) -> IO (SizedByteArray 192 Bytes)
forall (n :: Nat) ba p.
(ByteArrayN n ba, KnownNat n) =>
(Ptr p -> IO ()) -> IO ba
AS.create ((Ptr () -> IO ()) -> IO (SizedByteArray 192 Bytes))
-> (Ptr () -> IO ()) -> IO (SizedByteArray 192 Bytes)
forall a b. (a -> b) -> a -> b
$ \Ptr ()
ptr ->
SizedByteArray 288 Bytes -> (Ptr () -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 288 Bytes -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 288 Bytes
SizedByteArray (SizeOf (Point 'P2)) Bytes
p2 ((Ptr () -> IO ()) -> IO ()) -> (Ptr () -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr ()
p2' ->
Ptr () -> Ptr () -> IO ()
blst_p2_to_affine Ptr ()
ptr Ptr ()
p2'
p1AffSerialize :: Affine 'P1 -> IO (SizedByteArray P1SerializeSize Bytes)
p1AffSerialize :: Affine 'P1 -> IO (SizedByteArray 96 Bytes)
p1AffSerialize (Affine SizedByteArray (SizeOf (Affine 'P1)) Bytes
p1) =
(Ptr CUChar -> IO ()) -> IO (SizedByteArray 96 Bytes)
forall (n :: Nat) ba p.
(ByteArrayN n ba, KnownNat n) =>
(Ptr p -> IO ()) -> IO ba
AS.create ((Ptr CUChar -> IO ()) -> IO (SizedByteArray 96 Bytes))
-> (Ptr CUChar -> IO ()) -> IO (SizedByteArray 96 Bytes)
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
ptr ->
SizedByteArray 96 Bytes -> (Ptr () -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 96 Bytes -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 96 Bytes
SizedByteArray (SizeOf (Affine 'P1)) Bytes
p1 ((Ptr () -> IO ()) -> IO ()) -> (Ptr () -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr ()
p1' ->
Ptr CUChar -> Ptr () -> IO ()
blst_p1_affine_serialize Ptr CUChar
ptr Ptr ()
p1'
p1AffCompress :: Affine 'P1 -> IO (SizedByteArray P1CompressSize Bytes)
p1AffCompress :: Affine 'P1 -> IO (SizedByteArray 48 Bytes)
p1AffCompress (Affine SizedByteArray (SizeOf (Affine 'P1)) Bytes
p1) =
(Ptr CUChar -> IO ()) -> IO (SizedByteArray 48 Bytes)
forall (n :: Nat) ba p.
(ByteArrayN n ba, KnownNat n) =>
(Ptr p -> IO ()) -> IO ba
AS.create ((Ptr CUChar -> IO ()) -> IO (SizedByteArray 48 Bytes))
-> (Ptr CUChar -> IO ()) -> IO (SizedByteArray 48 Bytes)
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
ptr ->
SizedByteArray 96 Bytes -> (Ptr () -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 96 Bytes -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 96 Bytes
SizedByteArray (SizeOf (Affine 'P1)) Bytes
p1 ((Ptr () -> IO ()) -> IO ()) -> (Ptr () -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr ()
p1' ->
Ptr CUChar -> Ptr () -> IO ()
blst_p1_affine_compress Ptr CUChar
ptr Ptr ()
p1'
p1Deserialize
:: ByteArrayAccess ba
=> SizedByteArray P1SerializeSize ba
-> IO (Either BlstError (Affine 'P1))
p1Deserialize :: forall ba.
ByteArrayAccess ba =>
SizedByteArray 96 ba -> IO (Either BlstError (Affine 'P1))
p1Deserialize SizedByteArray 96 ba
bs = do
(SizedByteArray 96 Bytes -> Either BlstError (Affine 'P1))
-> IO (SizedByteArray 96 Bytes)
-> IO (Either BlstError (Affine 'P1))
forall a b. (a -> b) -> IO a -> IO b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap (Affine 'P1 -> Either BlstError (Affine 'P1)
forall a b. b -> Either a b
Right (Affine 'P1 -> Either BlstError (Affine 'P1))
-> (SizedByteArray 96 Bytes -> Affine 'P1)
-> SizedByteArray 96 Bytes
-> Either BlstError (Affine 'P1)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SizedByteArray 96 Bytes -> Affine 'P1
SizedByteArray (SizeOf (Affine 'P1)) Bytes -> Affine 'P1
forall (a :: PointKind).
SizedByteArray (SizeOf (Affine a)) Bytes -> Affine a
Affine) (IO (SizedByteArray 96 Bytes)
-> IO (Either BlstError (Affine 'P1)))
-> IO (SizedByteArray 96 Bytes)
-> IO (Either BlstError (Affine 'P1))
forall a b. (a -> b) -> a -> b
$
(Ptr () -> IO ()) -> IO (SizedByteArray 96 Bytes)
forall (n :: Nat) ba p.
(ByteArrayN n ba, KnownNat n) =>
(Ptr p -> IO ()) -> IO ba
AS.create ((Ptr () -> IO ()) -> IO (SizedByteArray 96 Bytes))
-> (Ptr () -> IO ()) -> IO (SizedByteArray 96 Bytes)
forall a b. (a -> b) -> a -> b
$ \Ptr ()
ptr ->
SizedByteArray 96 ba -> (Ptr CUChar -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 96 ba -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 96 ba
bs ((Ptr CUChar -> IO ()) -> IO ()) -> (Ptr CUChar -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
bs' -> do
CInt
res <- Ptr () -> Ptr CUChar -> IO CInt
blst_p1_deserialize Ptr ()
ptr Ptr CUChar
bs'
let res' :: BlstError
res' = Int -> BlstError
forall a. Enum a => Int -> a
toEnum (Int -> BlstError) -> Int -> BlstError
forall a b. (a -> b) -> a -> b
$ CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral CInt
res
case BlstError
res' of
BlstError
BlstSuccess -> () -> IO ()
forall a. a -> IO a
forall (f :: Type -> Type) a. Applicative f => a -> f a
pure ()
BlstError
x -> BlstError -> IO ()
forall e a. Exception e => e -> IO a
throwIO BlstError
x
IO (Either BlstError (Affine 'P1))
-> (BlstError -> IO (Either BlstError (Affine 'P1)))
-> IO (Either BlstError (Affine 'P1))
forall e a. Exception e => IO a -> (e -> IO a) -> IO a
`catch` \(BlstError
x :: BlstError) -> Either BlstError (Affine 'P1) -> IO (Either BlstError (Affine 'P1))
forall a. a -> IO a
forall (f :: Type -> Type) a. Applicative f => a -> f a
pure (Either BlstError (Affine 'P1)
-> IO (Either BlstError (Affine 'P1)))
-> Either BlstError (Affine 'P1)
-> IO (Either BlstError (Affine 'P1))
forall a b. (a -> b) -> a -> b
$ BlstError -> Either BlstError (Affine 'P1)
forall a b. a -> Either a b
Left BlstError
x
p1Uncompress
:: ByteArrayAccess ba
=> SizedByteArray P1CompressSize ba
-> IO (Either BlstError (Affine 'P1))
p1Uncompress :: forall ba.
ByteArrayAccess ba =>
SizedByteArray 48 ba -> IO (Either BlstError (Affine 'P1))
p1Uncompress SizedByteArray 48 ba
bs = do
(SizedByteArray 96 Bytes -> Either BlstError (Affine 'P1))
-> IO (SizedByteArray 96 Bytes)
-> IO (Either BlstError (Affine 'P1))
forall a b. (a -> b) -> IO a -> IO b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap (Affine 'P1 -> Either BlstError (Affine 'P1)
forall a b. b -> Either a b
Right (Affine 'P1 -> Either BlstError (Affine 'P1))
-> (SizedByteArray 96 Bytes -> Affine 'P1)
-> SizedByteArray 96 Bytes
-> Either BlstError (Affine 'P1)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SizedByteArray 96 Bytes -> Affine 'P1
SizedByteArray (SizeOf (Affine 'P1)) Bytes -> Affine 'P1
forall (a :: PointKind).
SizedByteArray (SizeOf (Affine a)) Bytes -> Affine a
Affine) (IO (SizedByteArray 96 Bytes)
-> IO (Either BlstError (Affine 'P1)))
-> IO (SizedByteArray 96 Bytes)
-> IO (Either BlstError (Affine 'P1))
forall a b. (a -> b) -> a -> b
$
(Ptr () -> IO ()) -> IO (SizedByteArray 96 Bytes)
forall (n :: Nat) ba p.
(ByteArrayN n ba, KnownNat n) =>
(Ptr p -> IO ()) -> IO ba
AS.create ((Ptr () -> IO ()) -> IO (SizedByteArray 96 Bytes))
-> (Ptr () -> IO ()) -> IO (SizedByteArray 96 Bytes)
forall a b. (a -> b) -> a -> b
$ \Ptr ()
ptr ->
SizedByteArray 48 ba -> (Ptr CUChar -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 48 ba -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 48 ba
bs ((Ptr CUChar -> IO ()) -> IO ()) -> (Ptr CUChar -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
bs' -> do
CInt
res <- Ptr () -> Ptr CUChar -> IO CInt
blst_p1_uncompress Ptr ()
ptr Ptr CUChar
bs'
let res' :: BlstError
res' = Int -> BlstError
forall a. Enum a => Int -> a
toEnum (Int -> BlstError) -> Int -> BlstError
forall a b. (a -> b) -> a -> b
$ CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral CInt
res
case BlstError
res' of
BlstError
BlstSuccess -> () -> IO ()
forall a. a -> IO a
forall (f :: Type -> Type) a. Applicative f => a -> f a
pure ()
BlstError
x -> BlstError -> IO ()
forall e a. Exception e => e -> IO a
throwIO BlstError
x
IO (Either BlstError (Affine 'P1))
-> (BlstError -> IO (Either BlstError (Affine 'P1)))
-> IO (Either BlstError (Affine 'P1))
forall e a. Exception e => IO a -> (e -> IO a) -> IO a
`catch` \(BlstError
x :: BlstError) -> Either BlstError (Affine 'P1) -> IO (Either BlstError (Affine 'P1))
forall a. a -> IO a
forall (f :: Type -> Type) a. Applicative f => a -> f a
pure (Either BlstError (Affine 'P1)
-> IO (Either BlstError (Affine 'P1)))
-> Either BlstError (Affine 'P1)
-> IO (Either BlstError (Affine 'P1))
forall a b. (a -> b) -> a -> b
$ BlstError -> Either BlstError (Affine 'P1)
forall a b. a -> Either a b
Left BlstError
x
p2AffSerialize :: Affine 'P2 -> IO (SizedByteArray P2SerializeSize Bytes)
p2AffSerialize :: Affine 'P2 -> IO (SizedByteArray 192 Bytes)
p2AffSerialize (Affine SizedByteArray (SizeOf (Affine 'P2)) Bytes
p2) =
(Ptr CUChar -> IO ()) -> IO (SizedByteArray 192 Bytes)
forall (n :: Nat) ba p.
(ByteArrayN n ba, KnownNat n) =>
(Ptr p -> IO ()) -> IO ba
AS.create ((Ptr CUChar -> IO ()) -> IO (SizedByteArray 192 Bytes))
-> (Ptr CUChar -> IO ()) -> IO (SizedByteArray 192 Bytes)
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
ptr ->
SizedByteArray 192 Bytes -> (Ptr () -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 192 Bytes -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 192 Bytes
SizedByteArray (SizeOf (Affine 'P2)) Bytes
p2 ((Ptr () -> IO ()) -> IO ()) -> (Ptr () -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr ()
p2' ->
Ptr CUChar -> Ptr () -> IO ()
blst_p2_affine_serialize Ptr CUChar
ptr Ptr ()
p2'
p2AffCompress :: Affine 'P2 -> IO (SizedByteArray P2CompressSize Bytes)
p2AffCompress :: Affine 'P2 -> IO (SizedByteArray 96 Bytes)
p2AffCompress (Affine SizedByteArray (SizeOf (Affine 'P2)) Bytes
p2) =
(Ptr CUChar -> IO ()) -> IO (SizedByteArray 96 Bytes)
forall (n :: Nat) ba p.
(ByteArrayN n ba, KnownNat n) =>
(Ptr p -> IO ()) -> IO ba
AS.create ((Ptr CUChar -> IO ()) -> IO (SizedByteArray 96 Bytes))
-> (Ptr CUChar -> IO ()) -> IO (SizedByteArray 96 Bytes)
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
ptr ->
SizedByteArray 192 Bytes -> (Ptr () -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 192 Bytes -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 192 Bytes
SizedByteArray (SizeOf (Affine 'P2)) Bytes
p2 ((Ptr () -> IO ()) -> IO ()) -> (Ptr () -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr ()
p2' ->
Ptr CUChar -> Ptr () -> IO ()
blst_p2_affine_compress Ptr CUChar
ptr Ptr ()
p2'
p2Deserialize
:: ByteArrayAccess ba
=> SizedByteArray P2SerializeSize ba
-> IO (Either BlstError (Affine 'P2))
p2Deserialize :: forall ba.
ByteArrayAccess ba =>
SizedByteArray 192 ba -> IO (Either BlstError (Affine 'P2))
p2Deserialize SizedByteArray 192 ba
bs = do
(SizedByteArray 192 Bytes -> Either BlstError (Affine 'P2))
-> IO (SizedByteArray 192 Bytes)
-> IO (Either BlstError (Affine 'P2))
forall a b. (a -> b) -> IO a -> IO b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap (Affine 'P2 -> Either BlstError (Affine 'P2)
forall a b. b -> Either a b
Right (Affine 'P2 -> Either BlstError (Affine 'P2))
-> (SizedByteArray 192 Bytes -> Affine 'P2)
-> SizedByteArray 192 Bytes
-> Either BlstError (Affine 'P2)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SizedByteArray 192 Bytes -> Affine 'P2
SizedByteArray (SizeOf (Affine 'P2)) Bytes -> Affine 'P2
forall (a :: PointKind).
SizedByteArray (SizeOf (Affine a)) Bytes -> Affine a
Affine) (IO (SizedByteArray 192 Bytes)
-> IO (Either BlstError (Affine 'P2)))
-> IO (SizedByteArray 192 Bytes)
-> IO (Either BlstError (Affine 'P2))
forall a b. (a -> b) -> a -> b
$
(Ptr () -> IO ()) -> IO (SizedByteArray 192 Bytes)
forall (n :: Nat) ba p.
(ByteArrayN n ba, KnownNat n) =>
(Ptr p -> IO ()) -> IO ba
AS.create ((Ptr () -> IO ()) -> IO (SizedByteArray 192 Bytes))
-> (Ptr () -> IO ()) -> IO (SizedByteArray 192 Bytes)
forall a b. (a -> b) -> a -> b
$ \Ptr ()
ptr ->
SizedByteArray 192 ba -> (Ptr CUChar -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 192 ba -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 192 ba
bs ((Ptr CUChar -> IO ()) -> IO ()) -> (Ptr CUChar -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
bs' -> do
CInt
res <- Ptr () -> Ptr CUChar -> IO CInt
blst_p2_deserialize Ptr ()
ptr Ptr CUChar
bs'
let res' :: BlstError
res' = Int -> BlstError
forall a. Enum a => Int -> a
toEnum (Int -> BlstError) -> Int -> BlstError
forall a b. (a -> b) -> a -> b
$ CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral CInt
res
case BlstError
res' of
BlstError
BlstSuccess -> () -> IO ()
forall a. a -> IO a
forall (f :: Type -> Type) a. Applicative f => a -> f a
pure ()
BlstError
x -> BlstError -> IO ()
forall e a. Exception e => e -> IO a
throwIO BlstError
x
IO (Either BlstError (Affine 'P2))
-> (BlstError -> IO (Either BlstError (Affine 'P2)))
-> IO (Either BlstError (Affine 'P2))
forall e a. Exception e => IO a -> (e -> IO a) -> IO a
`catch` \(BlstError
x :: BlstError) -> Either BlstError (Affine 'P2) -> IO (Either BlstError (Affine 'P2))
forall a. a -> IO a
forall (f :: Type -> Type) a. Applicative f => a -> f a
pure (Either BlstError (Affine 'P2)
-> IO (Either BlstError (Affine 'P2)))
-> Either BlstError (Affine 'P2)
-> IO (Either BlstError (Affine 'P2))
forall a b. (a -> b) -> a -> b
$ BlstError -> Either BlstError (Affine 'P2)
forall a b. a -> Either a b
Left BlstError
x
p2Uncompress
:: ByteArrayAccess ba
=> SizedByteArray P2CompressSize ba
-> IO (Either BlstError (Affine 'P2))
p2Uncompress :: forall ba.
ByteArrayAccess ba =>
SizedByteArray 96 ba -> IO (Either BlstError (Affine 'P2))
p2Uncompress SizedByteArray 96 ba
bs = do
(SizedByteArray 192 Bytes -> Either BlstError (Affine 'P2))
-> IO (SizedByteArray 192 Bytes)
-> IO (Either BlstError (Affine 'P2))
forall a b. (a -> b) -> IO a -> IO b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap (Affine 'P2 -> Either BlstError (Affine 'P2)
forall a b. b -> Either a b
Right (Affine 'P2 -> Either BlstError (Affine 'P2))
-> (SizedByteArray 192 Bytes -> Affine 'P2)
-> SizedByteArray 192 Bytes
-> Either BlstError (Affine 'P2)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SizedByteArray 192 Bytes -> Affine 'P2
SizedByteArray (SizeOf (Affine 'P2)) Bytes -> Affine 'P2
forall (a :: PointKind).
SizedByteArray (SizeOf (Affine a)) Bytes -> Affine a
Affine) (IO (SizedByteArray 192 Bytes)
-> IO (Either BlstError (Affine 'P2)))
-> IO (SizedByteArray 192 Bytes)
-> IO (Either BlstError (Affine 'P2))
forall a b. (a -> b) -> a -> b
$
(Ptr () -> IO ()) -> IO (SizedByteArray 192 Bytes)
forall (n :: Nat) ba p.
(ByteArrayN n ba, KnownNat n) =>
(Ptr p -> IO ()) -> IO ba
AS.create ((Ptr () -> IO ()) -> IO (SizedByteArray 192 Bytes))
-> (Ptr () -> IO ()) -> IO (SizedByteArray 192 Bytes)
forall a b. (a -> b) -> a -> b
$ \Ptr ()
ptr ->
SizedByteArray 96 ba -> (Ptr CUChar -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 96 ba -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 96 ba
bs ((Ptr CUChar -> IO ()) -> IO ()) -> (Ptr CUChar -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
bs' -> do
CInt
res <- Ptr () -> Ptr CUChar -> IO CInt
blst_p2_uncompress Ptr ()
ptr Ptr CUChar
bs'
let res' :: BlstError
res' = Int -> BlstError
forall a. Enum a => Int -> a
toEnum (Int -> BlstError) -> Int -> BlstError
forall a b. (a -> b) -> a -> b
$ CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral CInt
res
case BlstError
res' of
BlstError
BlstSuccess -> () -> IO ()
forall a. a -> IO a
forall (f :: Type -> Type) a. Applicative f => a -> f a
pure ()
BlstError
x -> BlstError -> IO ()
forall e a. Exception e => e -> IO a
throwIO BlstError
x
IO (Either BlstError (Affine 'P2))
-> (BlstError -> IO (Either BlstError (Affine 'P2)))
-> IO (Either BlstError (Affine 'P2))
forall e a. Exception e => IO a -> (e -> IO a) -> IO a
`catch` \(BlstError
x :: BlstError) -> Either BlstError (Affine 'P2) -> IO (Either BlstError (Affine 'P2))
forall a. a -> IO a
forall (f :: Type -> Type) a. Applicative f => a -> f a
pure (Either BlstError (Affine 'P2)
-> IO (Either BlstError (Affine 'P2)))
-> Either BlstError (Affine 'P2)
-> IO (Either BlstError (Affine 'P2))
forall a b. (a -> b) -> a -> b
$ BlstError -> Either BlstError (Affine 'P2)
forall a b. a -> Either a b
Left BlstError
x
lendianFromScalar :: Scalar -> IO (SizedByteArray SkSerializeSize ScrubbedBytes)
lendianFromScalar :: Scalar -> IO (SizedByteArray 32 ScrubbedBytes)
lendianFromScalar (Scalar SizedByteArray (SizeOf Scalar) ScrubbedBytes
sc) =
(Ptr CUChar -> IO ()) -> IO (SizedByteArray 32 ScrubbedBytes)
forall (n :: Nat) ba p.
(ByteArrayN n ba, KnownNat n) =>
(Ptr p -> IO ()) -> IO ba
AS.create ((Ptr CUChar -> IO ()) -> IO (SizedByteArray 32 ScrubbedBytes))
-> (Ptr CUChar -> IO ()) -> IO (SizedByteArray 32 ScrubbedBytes)
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
out ->
SizedByteArray 32 ScrubbedBytes -> (Ptr () -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a.
SizedByteArray 32 ScrubbedBytes -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 32 ScrubbedBytes
SizedByteArray (SizeOf Scalar) ScrubbedBytes
sc ((Ptr () -> IO ()) -> IO ()) -> (Ptr () -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr ()
sc' ->
Ptr CUChar -> Ptr () -> IO ()
blst_lendian_from_scalar Ptr CUChar
out Ptr ()
sc'
scalarFromLendian :: ByteArrayAccess ba => SizedByteArray SkSerializeSize ba -> IO Scalar
scalarFromLendian :: forall ba. ByteArrayAccess ba => SizedByteArray 32 ba -> IO Scalar
scalarFromLendian SizedByteArray 32 ba
bs = (SizedByteArray 32 ScrubbedBytes -> Scalar)
-> IO (SizedByteArray 32 ScrubbedBytes) -> IO Scalar
forall a b. (a -> b) -> IO a -> IO b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap SizedByteArray 32 ScrubbedBytes -> Scalar
SizedByteArray (SizeOf Scalar) ScrubbedBytes -> Scalar
Scalar (IO (SizedByteArray 32 ScrubbedBytes) -> IO Scalar)
-> IO (SizedByteArray 32 ScrubbedBytes) -> IO Scalar
forall a b. (a -> b) -> a -> b
$
(Ptr () -> IO ()) -> IO (SizedByteArray 32 ScrubbedBytes)
forall (n :: Nat) ba p.
(ByteArrayN n ba, KnownNat n) =>
(Ptr p -> IO ()) -> IO ba
AS.create ((Ptr () -> IO ()) -> IO (SizedByteArray 32 ScrubbedBytes))
-> (Ptr () -> IO ()) -> IO (SizedByteArray 32 ScrubbedBytes)
forall a b. (a -> b) -> a -> b
$ \Ptr ()
out ->
SizedByteArray 32 ba -> (Ptr CUChar -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 32 ba -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 32 ba
bs ((Ptr CUChar -> IO ()) -> IO ()) -> (Ptr CUChar -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
bs' ->
Ptr () -> Ptr CUChar -> IO ()
blst_scalar_from_lendian Ptr ()
out Ptr CUChar
bs'
p1AddOrDoubleAffine :: Point 'P1 -> Affine 'P1 -> IO (Point 'P1)
p1AddOrDoubleAffine :: Point 'P1 -> Affine 'P1 -> IO (Point 'P1)
p1AddOrDoubleAffine (Point SizedByteArray (SizeOf (Point 'P1)) Bytes
a) (Affine SizedByteArray (SizeOf (Affine 'P1)) Bytes
b) = (SizedByteArray 144 Bytes -> Point 'P1)
-> IO (SizedByteArray 144 Bytes) -> IO (Point 'P1)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap SizedByteArray 144 Bytes -> Point 'P1
SizedByteArray (SizeOf (Point 'P1)) Bytes -> Point 'P1
forall (a :: PointKind).
SizedByteArray (SizeOf (Point a)) Bytes -> Point a
Point (IO (SizedByteArray 144 Bytes) -> IO (Point 'P1))
-> IO (SizedByteArray 144 Bytes) -> IO (Point 'P1)
forall a b. (a -> b) -> a -> b
$
(Ptr () -> IO ()) -> IO (SizedByteArray 144 Bytes)
forall (n :: Nat) ba p.
(ByteArrayN n ba, KnownNat n) =>
(Ptr p -> IO ()) -> IO ba
AS.create ((Ptr () -> IO ()) -> IO (SizedByteArray 144 Bytes))
-> (Ptr () -> IO ()) -> IO (SizedByteArray 144 Bytes)
forall a b. (a -> b) -> a -> b
$ \Ptr ()
out ->
SizedByteArray 144 Bytes -> (Ptr () -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 144 Bytes -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 144 Bytes
SizedByteArray (SizeOf (Point 'P1)) Bytes
a ((Ptr () -> IO ()) -> IO ()) -> (Ptr () -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr ()
a' ->
SizedByteArray 96 Bytes -> (Ptr () -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 96 Bytes -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 96 Bytes
SizedByteArray (SizeOf (Affine 'P1)) Bytes
b ((Ptr () -> IO ()) -> IO ()) -> (Ptr () -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr ()
b' ->
Ptr () -> Ptr () -> Ptr () -> IO ()
blst_p1_add_or_double_affine Ptr ()
out Ptr ()
a' Ptr ()
b'
p2AddOrDoubleAffine :: Point 'P2 -> Affine 'P2 -> IO (Point 'P2)
p2AddOrDoubleAffine :: Point 'P2 -> Affine 'P2 -> IO (Point 'P2)
p2AddOrDoubleAffine (Point SizedByteArray (SizeOf (Point 'P2)) Bytes
a) (Affine SizedByteArray (SizeOf (Affine 'P2)) Bytes
b) = (SizedByteArray 288 Bytes -> Point 'P2)
-> IO (SizedByteArray 288 Bytes) -> IO (Point 'P2)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap SizedByteArray 288 Bytes -> Point 'P2
SizedByteArray (SizeOf (Point 'P2)) Bytes -> Point 'P2
forall (a :: PointKind).
SizedByteArray (SizeOf (Point a)) Bytes -> Point a
Point (IO (SizedByteArray 288 Bytes) -> IO (Point 'P2))
-> IO (SizedByteArray 288 Bytes) -> IO (Point 'P2)
forall a b. (a -> b) -> a -> b
$
(Ptr () -> IO ()) -> IO (SizedByteArray 288 Bytes)
forall (n :: Nat) ba p.
(ByteArrayN n ba, KnownNat n) =>
(Ptr p -> IO ()) -> IO ba
AS.create ((Ptr () -> IO ()) -> IO (SizedByteArray 288 Bytes))
-> (Ptr () -> IO ()) -> IO (SizedByteArray 288 Bytes)
forall a b. (a -> b) -> a -> b
$ \Ptr ()
out ->
SizedByteArray 288 Bytes -> (Ptr () -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 288 Bytes -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 288 Bytes
SizedByteArray (SizeOf (Point 'P2)) Bytes
a ((Ptr () -> IO ()) -> IO ()) -> (Ptr () -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr ()
a' ->
SizedByteArray 192 Bytes -> (Ptr () -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 192 Bytes -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 192 Bytes
SizedByteArray (SizeOf (Affine 'P2)) Bytes
b ((Ptr () -> IO ()) -> IO ()) -> (Ptr () -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr ()
b' ->
Ptr () -> Ptr () -> Ptr () -> IO ()
blst_p2_add_or_double_affine Ptr ()
out Ptr ()
a' Ptr ()
b'
p1FromAffine :: Affine 'P1 -> IO (Point 'P1)
p1FromAffine :: Affine 'P1 -> IO (Point 'P1)
p1FromAffine (Affine SizedByteArray (SizeOf (Affine 'P1)) Bytes
aff) = (SizedByteArray 144 Bytes -> Point 'P1)
-> IO (SizedByteArray 144 Bytes) -> IO (Point 'P1)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap SizedByteArray 144 Bytes -> Point 'P1
SizedByteArray (SizeOf (Point 'P1)) Bytes -> Point 'P1
forall (a :: PointKind).
SizedByteArray (SizeOf (Point a)) Bytes -> Point a
Point (IO (SizedByteArray 144 Bytes) -> IO (Point 'P1))
-> IO (SizedByteArray 144 Bytes) -> IO (Point 'P1)
forall a b. (a -> b) -> a -> b
$
(Ptr () -> IO ()) -> IO (SizedByteArray 144 Bytes)
forall (n :: Nat) ba p.
(ByteArrayN n ba, KnownNat n) =>
(Ptr p -> IO ()) -> IO ba
AS.create ((Ptr () -> IO ()) -> IO (SizedByteArray 144 Bytes))
-> (Ptr () -> IO ()) -> IO (SizedByteArray 144 Bytes)
forall a b. (a -> b) -> a -> b
$ \Ptr ()
out ->
SizedByteArray 96 Bytes -> (Ptr () -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 96 Bytes -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 96 Bytes
SizedByteArray (SizeOf (Affine 'P1)) Bytes
aff ((Ptr () -> IO ()) -> IO ()) -> (Ptr () -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr ()
aff' ->
Ptr () -> Ptr () -> IO ()
blst_p1_from_affine Ptr ()
out Ptr ()
aff'
p2FromAffine :: Affine 'P2 -> IO (Point 'P2)
p2FromAffine :: Affine 'P2 -> IO (Point 'P2)
p2FromAffine (Affine SizedByteArray (SizeOf (Affine 'P2)) Bytes
aff) = (SizedByteArray 288 Bytes -> Point 'P2)
-> IO (SizedByteArray 288 Bytes) -> IO (Point 'P2)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap SizedByteArray 288 Bytes -> Point 'P2
SizedByteArray (SizeOf (Point 'P2)) Bytes -> Point 'P2
forall (a :: PointKind).
SizedByteArray (SizeOf (Point a)) Bytes -> Point a
Point (IO (SizedByteArray 288 Bytes) -> IO (Point 'P2))
-> IO (SizedByteArray 288 Bytes) -> IO (Point 'P2)
forall a b. (a -> b) -> a -> b
$
(Ptr () -> IO ()) -> IO (SizedByteArray 288 Bytes)
forall (n :: Nat) ba p.
(ByteArrayN n ba, KnownNat n) =>
(Ptr p -> IO ()) -> IO ba
AS.create ((Ptr () -> IO ()) -> IO (SizedByteArray 288 Bytes))
-> (Ptr () -> IO ()) -> IO (SizedByteArray 288 Bytes)
forall a b. (a -> b) -> a -> b
$ \Ptr ()
out ->
SizedByteArray 192 Bytes -> (Ptr () -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 192 Bytes -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 192 Bytes
SizedByteArray (SizeOf (Affine 'P2)) Bytes
aff ((Ptr () -> IO ()) -> IO ()) -> (Ptr () -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr ()
aff' ->
Ptr () -> Ptr () -> IO ()
blst_p2_from_affine Ptr ()
out Ptr ()
aff'
pairingChkNAggrPkInG1
:: ByteArrayAccess ba
=> PairingCtx
-> Affine 'P1
-> Bool
-> Maybe (Affine 'P2)
-> Bool
-> ba
-> IO BlstError
pairingChkNAggrPkInG1 :: forall ba.
ByteArrayAccess ba =>
PairingCtx
-> Affine 'P1
-> Bool
-> Maybe (Affine 'P2)
-> Bool
-> ba
-> IO BlstError
pairingChkNAggrPkInG1 (PairingCtx Bytes
ctx) (Affine SizedByteArray (SizeOf (Affine 'P1)) Bytes
pk) Bool
pk_gpck Maybe (Affine 'P2)
sig Bool
sig_gpck ba
msg =
(CInt -> BlstError) -> IO CInt -> IO BlstError
forall a b. (a -> b) -> IO a -> IO b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap (Int -> BlstError
forall a. Enum a => Int -> a
toEnum (Int -> BlstError) -> (CInt -> Int) -> CInt -> BlstError
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral) (IO CInt -> IO BlstError) -> IO CInt -> IO BlstError
forall a b. (a -> b) -> a -> b
$
Bytes -> (Ptr () -> IO CInt) -> IO CInt
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. Bytes -> (Ptr p -> IO a) -> IO a
withByteArray Bytes
ctx ((Ptr () -> IO CInt) -> IO CInt) -> (Ptr () -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr ()
ctx' ->
SizedByteArray 96 Bytes -> (Ptr () -> IO CInt) -> IO CInt
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 96 Bytes -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 96 Bytes
SizedByteArray (SizeOf (Affine 'P1)) Bytes
pk ((Ptr () -> IO CInt) -> IO CInt) -> (Ptr () -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr ()
pk' ->
((Ptr () -> IO CInt) -> IO CInt)
-> (Affine 'P2 -> (Ptr () -> IO CInt) -> IO CInt)
-> Maybe (Affine 'P2)
-> (Ptr () -> IO CInt)
-> IO CInt
forall b a. b -> (a -> b) -> Maybe a -> b
maybe ((Ptr () -> IO CInt) -> Ptr () -> IO CInt
forall a b. (a -> b) -> a -> b
$ Ptr ()
forall a. Ptr a
nullPtr) (SizedByteArray 192 Bytes -> (Ptr () -> IO CInt) -> IO CInt
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 192 Bytes -> (Ptr p -> IO a) -> IO a
withByteArray (SizedByteArray 192 Bytes -> (Ptr () -> IO CInt) -> IO CInt)
-> (Affine 'P2 -> SizedByteArray 192 Bytes)
-> Affine 'P2
-> (Ptr () -> IO CInt)
-> IO CInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Affine 'P2 -> SizedByteArray 192 Bytes
Affine 'P2 -> SizedByteArray (SizeOf (Affine 'P2)) Bytes
forall (a :: PointKind).
Affine a -> SizedByteArray (SizeOf (Affine a)) Bytes
unAffine) Maybe (Affine 'P2)
sig ((Ptr () -> IO CInt) -> IO CInt) -> (Ptr () -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr ()
sig' ->
ba -> (Ptr CUChar -> IO CInt) -> IO CInt
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. ba -> (Ptr p -> IO a) -> IO a
withByteArray ba
msg ((Ptr CUChar -> IO CInt) -> IO CInt)
-> (Ptr CUChar -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
msg' ->
Ptr ()
-> Ptr ()
-> CUChar
-> Ptr ()
-> CUChar
-> Ptr CUChar
-> CULong
-> Ptr CUChar
-> CULong
-> IO CInt
blst_pairing_chk_n_aggr_pk_in_g1 Ptr ()
ctx' Ptr ()
pk' (Bool -> CUChar
forall a. Num a => Bool -> a
fromBool Bool
pk_gpck) Ptr ()
sig'
(Bool -> CUChar
forall a. Num a => Bool -> a
fromBool Bool
sig_gpck) Ptr CUChar
msg' (Int -> CULong
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CULong) -> Int -> CULong
forall a b. (a -> b) -> a -> b
$ ba -> Int
forall ba. ByteArrayAccess ba => ba -> Int
length ba
msg) Ptr CUChar
forall a. Ptr a
nullPtr CULong
0
pairingChkNAggrPkInG2
:: ByteArrayAccess ba
=> PairingCtx
-> Affine 'P2
-> Bool
-> Maybe (Affine 'P1)
-> Bool
-> ba
-> IO BlstError
pairingChkNAggrPkInG2 :: forall ba.
ByteArrayAccess ba =>
PairingCtx
-> Affine 'P2
-> Bool
-> Maybe (Affine 'P1)
-> Bool
-> ba
-> IO BlstError
pairingChkNAggrPkInG2 (PairingCtx Bytes
ctx) (Affine SizedByteArray (SizeOf (Affine 'P2)) Bytes
pk) Bool
pk_gpck Maybe (Affine 'P1)
sig Bool
sig_gpck ba
msg =
(CInt -> BlstError) -> IO CInt -> IO BlstError
forall a b. (a -> b) -> IO a -> IO b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap (Int -> BlstError
forall a. Enum a => Int -> a
toEnum (Int -> BlstError) -> (CInt -> Int) -> CInt -> BlstError
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CInt -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral) (IO CInt -> IO BlstError) -> IO CInt -> IO BlstError
forall a b. (a -> b) -> a -> b
$
Bytes -> (Ptr () -> IO CInt) -> IO CInt
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. Bytes -> (Ptr p -> IO a) -> IO a
withByteArray Bytes
ctx ((Ptr () -> IO CInt) -> IO CInt) -> (Ptr () -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr ()
ctx' ->
SizedByteArray 192 Bytes -> (Ptr () -> IO CInt) -> IO CInt
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 192 Bytes -> (Ptr p -> IO a) -> IO a
withByteArray SizedByteArray 192 Bytes
SizedByteArray (SizeOf (Affine 'P2)) Bytes
pk ((Ptr () -> IO CInt) -> IO CInt) -> (Ptr () -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr ()
pk' ->
((Ptr () -> IO CInt) -> IO CInt)
-> (Affine 'P1 -> (Ptr () -> IO CInt) -> IO CInt)
-> Maybe (Affine 'P1)
-> (Ptr () -> IO CInt)
-> IO CInt
forall b a. b -> (a -> b) -> Maybe a -> b
maybe ((Ptr () -> IO CInt) -> Ptr () -> IO CInt
forall a b. (a -> b) -> a -> b
$ Ptr ()
forall a. Ptr a
nullPtr) (SizedByteArray 96 Bytes -> (Ptr () -> IO CInt) -> IO CInt
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. SizedByteArray 96 Bytes -> (Ptr p -> IO a) -> IO a
withByteArray (SizedByteArray 96 Bytes -> (Ptr () -> IO CInt) -> IO CInt)
-> (Affine 'P1 -> SizedByteArray 96 Bytes)
-> Affine 'P1
-> (Ptr () -> IO CInt)
-> IO CInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Affine 'P1 -> SizedByteArray 96 Bytes
Affine 'P1 -> SizedByteArray (SizeOf (Affine 'P1)) Bytes
forall (a :: PointKind).
Affine a -> SizedByteArray (SizeOf (Affine a)) Bytes
unAffine) Maybe (Affine 'P1)
sig ((Ptr () -> IO CInt) -> IO CInt) -> (Ptr () -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr ()
sig' ->
ba -> (Ptr CUChar -> IO CInt) -> IO CInt
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. ba -> (Ptr p -> IO a) -> IO a
withByteArray ba
msg ((Ptr CUChar -> IO CInt) -> IO CInt)
-> (Ptr CUChar -> IO CInt) -> IO CInt
forall a b. (a -> b) -> a -> b
$ \Ptr CUChar
msg' ->
Ptr ()
-> Ptr ()
-> CUChar
-> Ptr ()
-> CUChar
-> Ptr CUChar
-> CULong
-> Ptr CUChar
-> CULong
-> IO CInt
blst_pairing_chk_n_aggr_pk_in_g2 Ptr ()
ctx' Ptr ()
pk' (Bool -> CUChar
forall a. Num a => Bool -> a
fromBool Bool
pk_gpck) Ptr ()
sig'
(Bool -> CUChar
forall a. Num a => Bool -> a
fromBool Bool
sig_gpck) Ptr CUChar
msg' (Int -> CULong
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CULong) -> Int -> CULong
forall a b. (a -> b) -> a -> b
$ ba -> Int
forall ba. ByteArrayAccess ba => ba -> Int
length ba
msg) Ptr CUChar
forall a. Ptr a
nullPtr CULong
0
pairingInit :: ByteArrayAccess ba => EncodeMethod -> Maybe ba -> IO PairingCtx
pairingInit :: forall ba.
ByteArrayAccess ba =>
EncodeMethod -> Maybe ba -> IO PairingCtx
pairingInit EncodeMethod
hoe Maybe ba
dst = do
CULong
sz <- IO CULong
blst_pairing_sizeof
{-# LINE 431 "src/Crypto/BLST/Internal/Bindings.chs" #-}
fmap PairingCtx $ BA.create (fromIntegral sz) $ \out ->
maybe ($ nullPtr) withByteArray dst $ \dst' ->
blst_pairing_init out (fromIntegral $ fromEnum hoe)
dst' (maybe 0 (fromIntegral . length) dst)
pairingCommit :: PairingCtx -> IO ()
pairingCommit :: PairingCtx -> IO ()
pairingCommit (PairingCtx Bytes
ctx) =
Bytes -> (Ptr () -> IO ()) -> IO ()
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. Bytes -> (Ptr p -> IO a) -> IO a
withByteArray Bytes
ctx ((Ptr () -> IO ()) -> IO ()) -> (Ptr () -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr ()
ctx' ->
Ptr () -> IO ()
blst_pairing_commit Ptr ()
ctx'
pairingFinalVerify :: PairingCtx -> IO Bool
pairingFinalVerify :: PairingCtx -> IO Bool
pairingFinalVerify (PairingCtx Bytes
ctx) = (CUChar -> Bool) -> IO CUChar -> IO Bool
forall a b. (a -> b) -> IO a -> IO b
forall (f :: Type -> Type) a b. Functor f => (a -> b) -> f a -> f b
fmap CUChar -> Bool
forall a. (Eq a, Num a) => a -> Bool
toBool (IO CUChar -> IO Bool) -> IO CUChar -> IO Bool
forall a b. (a -> b) -> a -> b
$
Bytes -> (Ptr () -> IO CUChar) -> IO CUChar
forall ba p a. ByteArrayAccess ba => ba -> (Ptr p -> IO a) -> IO a
forall p a. Bytes -> (Ptr p -> IO a) -> IO a
withByteArray Bytes
ctx ((Ptr () -> IO CUChar) -> IO CUChar)
-> (Ptr () -> IO CUChar) -> IO CUChar
forall a b. (a -> b) -> a -> b
$ \Ptr ()
ctx' ->
Ptr () -> Ptr () -> IO CUChar
blst_pairing_finalverify Ptr ()
ctx' Ptr ()
forall a. Ptr a
nullPtr
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_keygen"
blst_keygen :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> (IO ()))))))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_sk_to_pk_in_g1"
blst_sk_to_pk_in_g1 :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO ())))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_sk_to_pk_in_g2"
blst_sk_to_pk_in_g2 :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO ())))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_sign_pk_in_g1"
blst_sign_pk_in_g1 :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO ()))))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_sign_pk_in_g2"
blst_sign_pk_in_g2 :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO ()))))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_encode_to_g1"
blst_encode_to_g1 :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> (IO ()))))))))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_hash_to_g1"
blst_hash_to_g1 :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> (IO ()))))))))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_encode_to_g2"
blst_encode_to_g2 :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> (IO ()))))))))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_hash_to_g2"
blst_hash_to_g2 :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> (IO ()))))))))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h __c2hs_wrapped__blst_core_verify_pk_in_g1"
blst_core_verify_pk_in_g1 :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CUChar -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> (IO C2HSImp.CInt))))))))))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h __c2hs_wrapped__blst_core_verify_pk_in_g2"
blst_core_verify_pk_in_g2 :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CUChar -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> (IO C2HSImp.CInt))))))))))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_p1_to_affine"
blst_p1_to_affine :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO ())))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_p2_to_affine"
blst_p2_to_affine :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO ())))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_p1_affine_serialize"
blst_p1_affine_serialize :: ((C2HSImp.Ptr C2HSImp.CUChar) -> ((C2HSImp.Ptr ()) -> (IO ())))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_p1_affine_compress"
blst_p1_affine_compress :: ((C2HSImp.Ptr C2HSImp.CUChar) -> ((C2HSImp.Ptr ()) -> (IO ())))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_p1_deserialize"
blst_p1_deserialize :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (IO C2HSImp.CInt)))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_p1_uncompress"
blst_p1_uncompress :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (IO C2HSImp.CInt)))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_p2_affine_serialize"
blst_p2_affine_serialize :: ((C2HSImp.Ptr C2HSImp.CUChar) -> ((C2HSImp.Ptr ()) -> (IO ())))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_p2_affine_compress"
blst_p2_affine_compress :: ((C2HSImp.Ptr C2HSImp.CUChar) -> ((C2HSImp.Ptr ()) -> (IO ())))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_p2_deserialize"
blst_p2_deserialize :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (IO C2HSImp.CInt)))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_p2_uncompress"
blst_p2_uncompress :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (IO C2HSImp.CInt)))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_lendian_from_scalar"
blst_lendian_from_scalar :: ((C2HSImp.Ptr C2HSImp.CUChar) -> ((C2HSImp.Ptr ()) -> (IO ())))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_scalar_from_lendian"
blst_scalar_from_lendian :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (IO ())))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_p1_add_or_double_affine"
blst_p1_add_or_double_affine :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO ()))))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_p2_add_or_double_affine"
blst_p2_add_or_double_affine :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO ()))))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_p1_from_affine"
blst_p1_from_affine :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO ())))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_p2_from_affine"
blst_p2_from_affine :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO ())))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h __c2hs_wrapped__blst_pairing_chk_n_aggr_pk_in_g1"
blst_pairing_chk_n_aggr_pk_in_g1 :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CUChar -> ((C2HSImp.Ptr ()) -> (C2HSImp.CUChar -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> (IO C2HSImp.CInt))))))))))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h __c2hs_wrapped__blst_pairing_chk_n_aggr_pk_in_g2"
blst_pairing_chk_n_aggr_pk_in_g2 :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (C2HSImp.CUChar -> ((C2HSImp.Ptr ()) -> (C2HSImp.CUChar -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> (IO C2HSImp.CInt))))))))))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_pairing_sizeof"
blst_pairing_sizeof :: (IO C2HSImp.CULong)
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h __c2hs_wrapped__blst_pairing_init"
blst_pairing_init :: ((C2HSImp.Ptr ()) -> (C2HSImp.CUChar -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> (IO ())))))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h blst_pairing_commit"
blst_pairing_commit :: ((C2HSImp.Ptr ()) -> (IO ()))
foreign import ccall safe "Crypto/BLST/Internal/Bindings.chs.h __c2hs_wrapped__blst_pairing_finalverify"
blst_pairing_finalverify :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CUChar)))