{-# LANGUAGE RecordWildCards, MultiWayIf, NamedFieldPuns #-}
module Bulletproofs.RangeProof.Verifier (
verifyProof,
verifyTPoly,
verifyLRCommitment,
) where
import Protolude
import qualified Crypto.PubKey.ECC.Types as Crypto
import PrimeField (PrimeField(..), toInt)
import Bulletproofs.RangeProof.Internal
import Bulletproofs.Curve
import Bulletproofs.Utils
import qualified Bulletproofs.MultiRangeProof.Verifier as MRP
verifyProof
:: KnownNat p
=> Integer
-> Crypto.Point
-> RangeProof (PrimeField p)
-> Bool
verifyProof upperBound vCommit proof@RangeProof{..}
= MRP.verifyProof upperBound [vCommit] proof
verifyTPoly
:: KnownNat p
=> Integer
-> Crypto.Point
-> RangeProof (PrimeField p)
-> PrimeField p
-> PrimeField p
-> PrimeField p
-> Bool
verifyTPoly n vCommit
= MRP.verifyTPoly n [vCommit]
verifyLRCommitment
:: KnownNat p
=> Integer
-> RangeProof (PrimeField p)
-> PrimeField p
-> PrimeField p
-> PrimeField p
-> Bool
verifyLRCommitment n
= MRP.verifyLRCommitment n 1