{-# OPTIONS_GHC -O2 -feager-blackholing #-}
{-# LANGUAGE Safe #-}
module Crypto.ECC.Weierstrass.ECDH ( basicecdh
, EC
, ECPF
)
where
import safe Crypto.ECC.Weierstrass.Internal
basicecdh :: EC Integer -> ECPF Integer -> Integer -> Integer
basicecdh :: EC Integer -> ECPF Integer -> Integer -> Integer
basicecdh EC Integer
c ECPF Integer
qB Integer
dA = if forall a. EC a -> ECPF a -> Bool
ison EC Integer
c ECPF Integer
qB then forall a b. (a, b) -> a
fst forall a b. (a -> b) -> a -> b
$ forall a. EC a -> ECPF a -> (Integer, Integer)
affine EC Integer
c forall a b. (a -> b) -> a -> b
$ forall a. EC a -> ECPF a -> Integer -> ECPF a
pmul EC Integer
c ECPF Integer
qB Integer
dA
else forall a. HasCallStack => [Char] -> a
error [Char]
"point not on curve"