{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ScopedTypeVariables #-}

module Cardano.Crypto.EllipticCurve.BLS12_381 (
  -- * Types
  Point,
  Point1,
  Point2,
  PT,
  Curve1,
  Curve2,
  BLSTError (..),

  -- * BLS Class
  BLS,

  -- * Point / Group operations

  -- | These work on both curves, and take phantom parameters of type 'Curve1'
  -- or 'Curve2' to select one of the two provided elliptic curves.
  blsInGroup,
  blsAddOrDouble,
  blsMult,
  blsCneg,
  blsNeg,
  blsCompress,
  blsSerialize,
  blsUncompress,
  blsDeserialize,
  blsHash,
  blsGenerator,
  blsIsInf,

  -- * PT operations
  ptMult,
  ptFinalVerify,

  -- * Pairings
  millerLoop,

  -- * The period (modulo) of scalars
  scalarPeriod,
)
where

import Cardano.Crypto.EllipticCurve.BLS12_381.Internal