secret-sharing-1.0.0.0: src/Crypto/SecretSharing/FiniteField.hs
{-# LANGUAGE DeriveDataTypeable, DeriveGeneric, GeneralizedNewtypeDeriving, TemplateHaskell #-}
-----------------------------------------------------------------------------
-- |
-- Module : Crypto.SecretSharing.FiniteField
-- Copyright : Peter Robinson 2014
-- License : LGPL
--
-- Maintainer : Peter Robinson <peter.robinson@monoid.at>
-- Stability : stable
-- Portability : portable
--
-----------------------------------------------------------------------------
module Crypto.SecretSharing.FiniteField
where
import Data.Typeable
import GHC.Generics
import Data.FiniteField.PrimeField as PF
import Crypto.SecretSharing.Prime
-- | A finite prime field. All computations are performed in this field.
newtype FField = FField { number :: $(primeField $ fromIntegral prime) }
deriving(Show,Read,Ord,Eq,Num,Fractional,Generic,Typeable)
-- | A polynomial over the finite field given as a list of coefficients.
type Polyn = [FField]
-- | Evaluates the polynomial at a given point.
evalPolynomial :: Polyn -> FField -> FField
evalPolynomial coeffs x
= foldr (\c res -> c + (x * res)) 0 coeffs