{-# LANGUAGE OverloadedStrings #-}
-- | Convenience module for SD-JWT verifiers.
--
-- This module provides everything needed to verify SD-JWT presentations
-- and extract claims. It exports a focused API for the verifier role,
-- excluding modules that verifiers don't need (like Issuance and Presentation).
--
-- == Usage
--
-- For verifiers, import this module:
--
-- @
-- import SDJWT.Verifier
-- @
--
-- This gives you access to:
--
-- * Core data types (HashAlgorithm, SDJWTPresentation, ProcessedSDJWTPayload, etc.)
-- * Serialization functions ('deserializePresentation')
-- * Verification functions ('verifySDJWT')
--
-- == Verifying SD-JWTs
--
-- The main function for verifying SD-JWT presentations is 'verifySDJWT':
--
-- @
-- -- Verify SD-JWT presentation (includes signature, disclosures, and key binding verification)
-- result <- verifySDJWT issuerPublicKey presentation Nothing
-- case result of
--   Right processedPayload -> do
--     let claims = processedClaims processedPayload
--     -- Use verified claims...
--     -- If key binding was present, access the holder's public key:
--     case keyBindingInfo processedPayload of
--       Just kbInfo -> 
--         let holderPublicKey = kbPublicKey kbInfo
--         -- Use holder's public key for subsequent operations...
--       Nothing -> -- No key binding present
--   Left err -> -- Handle error
-- @
--
-- For advanced use cases (e.g., verifying key binding separately or parsing payloads),
-- import 'SDJWT.Internal.Verification' to access additional low-level functions.
--
-- == Example
--
-- >>> :set -XOverloadedStrings
-- >>> import SDJWT.Verifier
-- >>> import qualified Data.Text as T
-- >>> -- Deserialize presentation received from holder
-- >>> -- let presentationText = "eyJhbGciOiJSUzI1NiJ9..."
-- >>> -- case deserializePresentation (T.pack presentationText) of
-- >>> --   Right presentation -> do
-- >>> --     issuerPublicKeyJWK <- loadPublicKeyJWK
-- >>> --     verifySDJWT issuerPublicKeyJWK presentation Nothing
-- >>> --   Left err -> Left err
-- >>> -- Extract claims (includes both regular claims and disclosed claims)
-- >>> -- let claims = processedClaims processedPayload
module SDJWT.Verifier
  ( -- * Core Types
    module SDJWT.Internal.Types
    -- * Serialization
  , module SDJWT.Internal.Serialization
    -- * Verification
    -- | Functions for verifying SD-JWT presentations.
  , verifySDJWT
  ) where

import SDJWT.Internal.Types
import SDJWT.Internal.Serialization
import SDJWT.Internal.Verification
  ( verifySDJWT
  )