-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | An implementation of the Oblivious Transfer protocol in Haskell
--   
--   Please see the README on GitHub at
--   <a>https://github.com/adjoint-io/oblivious-transfer#readme</a>
@package oblivious-transfer
@version 0.1.0

module OT

-- | Setup: Only once, independently of the number of OT messages *m*.
setup :: (MonadRandom m, MonadFail m) => Curve -> m (Integer, Point, Point)

-- | Choose: In parallel for all OT messages.
choose :: (MonadRandom m, MonadFail m) => Curve -> Integer -> Point -> m (Integer, Point, Integer)

-- | Sender's key derivation from his private key and receiver's response
--   In parallel for all OT messages
deriveSenderKeys :: Curve -> Integer -> Integer -> Point -> Point -> [Integer]

-- | Receiver's key derivation from his private key and sender's public key
--   In parallel for all OT messages
deriveReceiverKey :: Curve -> Integer -> Point -> Integer

-- | Fold together <tt>m</tt> calls of <a>deriveSenderKeys</a>
mDeriveSenderKeys :: Curve -> Integer -> Integer -> [Point] -> Point -> [[Integer]]

-- | Fold together <tt>m</tt> calls of <tt>deriveReceiverKeys</tt>
mDeriveReceiverKeys :: Curve -> [Integer] -> Point -> [Integer]

-- | Call <a>choose</a> <tt>m</tt> times to create a list of three lists |
--   Return lists of private keys, responses and choice bit
mChoose :: (Eq t, Num t, MonadRandom m, MonadFail m) => Curve -> Integer -> Point -> t -> [(Integer, Point, Integer)] -> m [(Integer, Point, Integer)]
