add P256 work in progress binding
This commit is contained in:
parent
e1e449d121
commit
e52a75af75
88
Crypto/PubKey/ECC/P256.hs
Normal file
88
Crypto/PubKey/ECC/P256.hs
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
-- |
|
||||||
|
-- Module : Crypto.PubKey.ECC.P256
|
||||||
|
-- License : BSD-style
|
||||||
|
-- Maintainer : Vincent Hanquez <vincent@snarc.org>
|
||||||
|
-- Stability : experimental
|
||||||
|
-- Portability : unknown
|
||||||
|
--
|
||||||
|
-- P256 support
|
||||||
|
--
|
||||||
|
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
{-# LANGUAGE BangPatterns #-}
|
||||||
|
{-# LANGUAGE EmptyDataDecls #-}
|
||||||
|
{-# OPTIONS_GHC -fno-warn-unused-binds #-}
|
||||||
|
{-# OPTIONS_GHC -fno-warn-unused-matches #-}
|
||||||
|
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
|
||||||
|
module Crypto.PubKey.ECC.P256
|
||||||
|
( SecretKey
|
||||||
|
, PublicKey
|
||||||
|
) where
|
||||||
|
|
||||||
|
import Data.Word
|
||||||
|
import Foreign.Ptr
|
||||||
|
import Foreign.C.Types
|
||||||
|
|
||||||
|
import Crypto.Internal.Compat
|
||||||
|
import Crypto.Internal.Imports
|
||||||
|
import Crypto.Internal.Memory
|
||||||
|
import Crypto.Internal.ByteArray
|
||||||
|
import Crypto.Error
|
||||||
|
|
||||||
|
-- | A P256 Secret key
|
||||||
|
newtype SecretKey = SecretKey P256Num
|
||||||
|
deriving (Eq,ByteArrayAccess)
|
||||||
|
|
||||||
|
-- | A P256 public key
|
||||||
|
data PublicKey = PublicKey P256Num P256Num
|
||||||
|
deriving (Show,Eq)
|
||||||
|
|
||||||
|
newtype P256Num = P256Num SecureBytes
|
||||||
|
deriving (Eq,ByteArrayAccess)
|
||||||
|
|
||||||
|
instance Show P256Num where
|
||||||
|
show _ = "P256Num"
|
||||||
|
|
||||||
|
publicKeySize :: Int
|
||||||
|
publicKeySize = 32
|
||||||
|
|
||||||
|
secretKeySize :: Int
|
||||||
|
secretKeySize = 32
|
||||||
|
|
||||||
|
type P256Digit = Word32
|
||||||
|
|
||||||
|
foreign import ccall "cryptonite_p256_init"
|
||||||
|
ccryptonite_p256_init :: Ptr P256Num -> IO ()
|
||||||
|
foreign import ccall "cryptonite_p256_clear"
|
||||||
|
ccryptonite_p256_clear :: Ptr P256Num -> IO ()
|
||||||
|
foreign import ccall "cryptonite_p256_add"
|
||||||
|
ccryptonite_p256_add :: Ptr P256Num -> Ptr P256Num -> Ptr P256Num -> IO CInt
|
||||||
|
foreign import ccall "cryptonite_p256_sub"
|
||||||
|
ccryptonite_p256_sub :: Ptr P256Num -> Ptr P256Num -> Ptr P256Num -> IO CInt
|
||||||
|
foreign import ccall "cryptonite_p256_cmp"
|
||||||
|
ccryptonite_p256_cmp :: Ptr P256Num -> Ptr P256Num -> IO CInt
|
||||||
|
foreign import ccall "cryptonite_p256_mod"
|
||||||
|
ccryptonite_p256_mod :: Ptr P256Num -> Ptr P256Num -> Ptr P256Num -> IO ()
|
||||||
|
foreign import ccall "cryptonite_p256_modmul"
|
||||||
|
ccryptonite_p256_modmul :: Ptr P256Num -> Ptr P256Num -> P256Digit -> Ptr P256Num -> Ptr P256Num -> IO ()
|
||||||
|
foreign import ccall "cryptonite_p256_modinv"
|
||||||
|
ccryptonite_p256_modinv :: Ptr P256Num -> Ptr P256Num -> Ptr P256Num -> IO ()
|
||||||
|
foreign import ccall "cryptonite_p256_modinv_vartime"
|
||||||
|
ccryptonite_p256_modinv_vartime :: Ptr P256Num -> Ptr P256Num -> Ptr P256Num -> IO ()
|
||||||
|
foreign import ccall "cryptonite_p256_base_point_mul"
|
||||||
|
ccryptonite_p256_basepoint_mul :: Ptr P256Num
|
||||||
|
-> Ptr P256Num -> Ptr P256Num
|
||||||
|
-> IO ()
|
||||||
|
foreign import ccall "cryptonite_p256_point_mul"
|
||||||
|
ccryptonite_p256_point_mul :: Ptr P256Num
|
||||||
|
-> Ptr P256Num -> Ptr P256Num
|
||||||
|
-> Ptr P256Num -> Ptr P256Num
|
||||||
|
-> IO ()
|
||||||
|
foreign import ccall "cryptonite_p256_is_valid_point"
|
||||||
|
ccryptonite_p256_is_valid_point :: Ptr P256Num -> Ptr P256Num -> IO CInt
|
||||||
|
|
||||||
|
foreign import ccall "cryptonite_p256_to_bin"
|
||||||
|
ccryptonite_p256_to_bin :: Ptr P256Num -> Ptr Word8 -> IO ()
|
||||||
|
|
||||||
|
foreign import ccall "cryptonite_p256_from_bin"
|
||||||
|
ccryptonite_p256_from_bin :: Ptr Word8 -> Ptr P256Num -> IO ()
|
||||||
@ -77,6 +77,7 @@ Library
|
|||||||
Crypto.PubKey.ECC.Prim
|
Crypto.PubKey.ECC.Prim
|
||||||
Crypto.PubKey.ECC.DH
|
Crypto.PubKey.ECC.DH
|
||||||
Crypto.PubKey.ECC.ECDSA
|
Crypto.PubKey.ECC.ECDSA
|
||||||
|
Crypto.PubKey.ECC.P256
|
||||||
Crypto.PubKey.ECC.Types
|
Crypto.PubKey.ECC.Types
|
||||||
Crypto.PubKey.Ed25519
|
Crypto.PubKey.Ed25519
|
||||||
Crypto.PubKey.RSA
|
Crypto.PubKey.RSA
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user