module PlutusCore.Crypto.BLS12_381.Bounds
  ( msmMaxScalarWords
  , msmScalarLb
  , msmScalarOutOfBounds
  , msmScalarUb
  ) where

{-|  The maximum size of a scalar for the BLS12-381 multiScalarMul functions.
64 words = 512 bytes = 4096 bits -}
msmMaxScalarWords :: Integer
msmMaxScalarWords :: Integer
msmMaxScalarWords = Integer
64

msmMaxScalarBits :: Integer
msmMaxScalarBits :: Integer
msmMaxScalarBits = Integer
64 Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
* Integer
msmMaxScalarWords

msmScalarUb :: Integer
msmScalarUb :: Integer
msmScalarUb = Integer
2 Integer -> Integer -> Integer
forall a b. (Num a, Integral b) => a -> b -> a
^ (Integer
msmMaxScalarBits Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
- Integer
1) Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
- Integer
1

msmScalarLb :: Integer
msmScalarLb :: Integer
msmScalarLb = -(Integer
2 Integer -> Integer -> Integer
forall a b. (Num a, Integral b) => a -> b -> a
^ (Integer
msmMaxScalarBits Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
- Integer
1))

msmScalarOutOfBounds :: Integer -> Bool
msmScalarOutOfBounds :: Integer -> Bool
msmScalarOutOfBounds Integer
s = Bool -> Bool
not (Integer
msmScalarLb Integer -> Integer -> Bool
forall a. Ord a => a -> a -> Bool
<= Integer
s Bool -> Bool -> Bool
&& Integer
s Integer -> Integer -> Bool
forall a. Ord a => a -> a -> Bool
<= Integer
msmScalarUb)
{-# INLINE msmScalarOutOfBounds #-}