module Crypto.Ed25519.Exceptions (
                PrivateKey
              , PublicKey
              , Signature(..)
              , generatePrivate
              , generatePublic
              , generateKeyPair
              , sign, valid
              -- * Import/Export interface
              , Pure.importPublic, Pure.importPrivate
              , Pure.exportPublic, Pure.exportPrivate
              ) where

import Data.ByteString(ByteString)
import Crypto.Ed25519.Pure(PublicKey(..),PrivateKey(..),Signature(..))
import qualified Crypto.Ed25519.Pure as Pure
import Crypto.Random

-- |Randomly generate an Ed25519 private key.
generatePrivate :: CryptoRandomGen g => g -> (PrivateKey, g)
generatePrivate = throwLeft . Pure.generatePrivate

-- |Randomly generate a curve25519 public key.
generatePublic :: PrivateKey -> PublicKey
generatePublic = Pure.generatePublic

generateKeyPair :: CryptoRandomGen g => g -> (PrivateKey, PublicKey, g)
generateKeyPair = throwLeft . Pure.generateKeyPair

sign :: ByteString -> PrivateKey -> PublicKey -> Signature
sign = Pure.sign

valid :: ByteString -> PublicKey -> Signature -> Bool
valid = Pure.valid