-----------------------------------------------------------------------------
-- |
-- Module      :  Crypto.ECC.NIST.ECDH
-- Copyright   :  (c) Marcel Fourné 20[09..14]
-- License     :  BSD3
-- Maintainer  :  Marcel Fourné (haskell@marcelfourne.de)
-- Stability   :  experimental
-- Portability :  Good
--
-- basic ECDH functions using hecc
--
-----------------------------------------------------------------------------

{-# OPTIONS_GHC -O2 -feager-blackholing #-}

module Crypto.ECC.NIST.ECDH
    where

import Crypto.ECC.NIST.Base
-- import Crypto.ECC.NIST.StandardCurves

-- private key dA of this side and public key qB of the communication partner, returning the simple x coordinate as result
-- to be executed on both sides with fitting parameters...
-- d = pickOne [1..N-1]
-- q = pmul G d
-- | basic ecdh for testing
basicecdh :: EC Integer -> Integer -> ECPF Integer -> Integer
basicecdh c dA qB = if ison c qB then let (x,_) = affine c $ pmul c qB dA
                                      in x
                    else error "point not on curve"