Crypto.Types.PubKey.ECC

crypto-pubkey-types-0.4.3: Generic cryptography Public keys algorithm types

License | BSD-style
Maintainer | Vincent Hanquez <vincent@snarc.org>
Stability | Experimental
Portability | Excellent
Safe Haskell | Safe
Language | Haskell98

Crypto.Types.PubKey.ECC

Contents

- recommended curves definition

Description

references: https://tools.ietf.org/html/rfc5915

Synopsis

- data Curve
  - = CurveF2m CurveBinary
  - | CurveFP CurvePrime
- data Point
  - = Point Integer Integer
  - | PointO
- type PublicPoint = Point
- type PrivateNumber = Integer
- data CurveBinary = CurveBinary Integer CurveCommon
- data CurvePrime = CurvePrime Integer CurveCommon
- common_curve :: Curve -> CurveCommon
- ecc_fx :: CurveBinary -> Integer
- ecc_p :: CurvePrime -> Integer
- data CurveCommon = CurveCommon {
  - ecc_a :: Integer
  - ecc_b :: Integer
  - ecc_g :: Point
  - ecc_n :: Integer
  - ecc_h :: Integer
  }
- data CurveName
  - = SEC_p112r1
  - | SEC_p112r2
  - | SEC_p128r1
  - | SEC_p128r2
  - | SEC_p160k1
  - | SEC_p160r1
  - | SEC_p160r2
  - | SEC_p192k1
  - | SEC_p192r1
  - | SEC_p224k1
  - | SEC_p224r1
  - | SEC_p256k1
  - | SEC_p256r1
  - | SEC_p384r1
  - | SEC_p521r1
  - | SEC_t113r1
  - | SEC_t113r2
  - | SEC_t131r1
  - | SEC_t131r2
  - | SEC_t163k1
  - | SEC_t163r1
  - | SEC_t163r2
  - | SEC_t193r1
  - | SEC_t193r2
  - | SEC_t233k1
  - | SEC_t233r1
  - | SEC_t239k1
  - | SEC_t283k1
  - | SEC_t283r1
  - | SEC_t409k1
  - | SEC_t409r1
  - | SEC_t571k1
  - | SEC_t571r1
- getCurveByName :: CurveName -> Curve

# Documentation

data Curve #

Define either a binary curve or a prime curve.

Constructors

CurveF2m CurveBinary | 𝔽(2^m)
CurveFP CurvePrime | 𝔽p

Instances

Eq Curve # |
Methods (==) :: Curve -> Curve -> Bool # (/=) :: Curve -> Curve -> Bool #
Data Curve # |
Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Curve -> c Curve # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Curve # toConstr :: Curve -> Constr # dataTypeOf :: Curve -> DataType # dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c Curve) # dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Curve) # gmapT :: (forall b. Data b => b -> b) -> Curve -> Curve # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Curve -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Curve -> r # gmapQ :: (forall d. Data d => d -> u) -> Curve -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Curve -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Curve -> m Curve # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Curve -> m Curve # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Curve -> m Curve #
Read Curve # |
Methods readsPrec :: Int -> ReadS Curve # readList :: ReadS [Curve] # readPrec :: ReadPrec Curve # readListPrec :: ReadPrec [Curve] #
Show Curve # |
Methods showsPrec :: Int -> Curve -> ShowS # show :: Curve -> String # showList :: [Curve] -> ShowS #

data Point #

Define a point on a curve.

Constructors

Point Integer Integer |
PointO | Point at Infinity

Instances

Eq Point # |
Methods (==) :: Point -> Point -> Bool # (/=) :: Point -> Point -> Bool #
Data Point # |
Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Point -> c Point # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Point # toConstr :: Point -> Constr # dataTypeOf :: Point -> DataType # dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c Point) # dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Point) # gmapT :: (forall b. Data b => b -> b) -> Point -> Point # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Point -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Point -> r # gmapQ :: (forall d. Data d => d -> u) -> Point -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Point -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Point -> m Point # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Point -> m Point # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Point -> m Point #
Read Point # |
Methods readsPrec :: Int -> ReadS Point # readList :: ReadS [Point] # readPrec :: ReadPrec Point # readListPrec :: ReadPrec [Point] #
Show Point # |
Methods showsPrec :: Int -> Point -> ShowS # show :: Point -> String # showList :: [Point] -> ShowS #

type PublicPoint = Point #

ECC Public Point

type PrivateNumber = Integer #

ECC Private Number

data CurveBinary #

Define an elliptic curve in 𝔽(2^m). The firt parameter is the Integer representatioin of the irreducible polynomial f(x).

Constructors

CurveBinary Integer CurveCommon |

Instances

Eq CurveBinary # |
Methods (==) :: CurveBinary -> CurveBinary -> Bool # (/=) :: CurveBinary -> CurveBinary -> Bool #
Data CurveBinary # |
Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> CurveBinary -> c CurveBinary # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c CurveBinary # toConstr :: CurveBinary -> Constr # dataTypeOf :: CurveBinary -> DataType # dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c CurveBinary) # dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CurveBinary) # gmapT :: (forall b. Data b => b -> b) -> CurveBinary -> CurveBinary # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> CurveBinary -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> CurveBinary -> r # gmapQ :: (forall d. Data d => d -> u) -> CurveBinary -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> CurveBinary -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> CurveBinary -> m CurveBinary # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> CurveBinary -> m CurveBinary # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> CurveBinary -> m CurveBinary #
Read CurveBinary # |
Methods readsPrec :: Int -> ReadS CurveBinary # readList :: ReadS [CurveBinary] # readPrec :: ReadPrec CurveBinary # readListPrec :: ReadPrec [CurveBinary] #
Show CurveBinary # |
Methods showsPrec :: Int -> CurveBinary -> ShowS # show :: CurveBinary -> String # showList :: [CurveBinary] -> ShowS #

data CurvePrime #

Define an elliptic curve in 𝔽p. The first parameter is the Prime Number.

Constructors

CurvePrime Integer CurveCommon |

Instances

Eq CurvePrime # |
Methods (==) :: CurvePrime -> CurvePrime -> Bool # (/=) :: CurvePrime -> CurvePrime -> Bool #
Data CurvePrime # |
Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> CurvePrime -> c CurvePrime # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c CurvePrime # toConstr :: CurvePrime -> Constr # dataTypeOf :: CurvePrime -> DataType # dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c CurvePrime) # dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CurvePrime) # gmapT :: (forall b. Data b => b -> b) -> CurvePrime -> CurvePrime # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> CurvePrime -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> CurvePrime -> r # gmapQ :: (forall d. Data d => d -> u) -> CurvePrime -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> CurvePrime -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> CurvePrime -> m CurvePrime # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> CurvePrime -> m CurvePrime # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> CurvePrime -> m CurvePrime #
Read CurvePrime # |
Methods readsPrec :: Int -> ReadS CurvePrime # readList :: ReadS [CurvePrime] # readPrec :: ReadPrec CurvePrime # readListPrec :: ReadPrec [CurvePrime] #
Show CurvePrime # |
Methods showsPrec :: Int -> CurvePrime -> ShowS # show :: CurvePrime -> String # showList :: [CurvePrime] -> ShowS #

common_curve :: Curve -> CurveCommon #

Parameters in common between binary and prime curves.

ecc_fx :: CurveBinary -> Integer #

Irreducible polynomial representing the characteristic of a CurveBinary.

ecc_p :: CurvePrime -> Integer #

Prime number representing the characteristic of a CurvePrime.

data CurveCommon #

Define common parameters in a curve definition of the form: y^2 = x^3 + ax + b.

Constructors

CurveCommon |
Fields ecc_a :: Integer curve parameter a ecc_b :: Integer curve parameter b ecc_g :: Point base point ecc_n :: Integer order of G ecc_h :: Integer cofactor

Instances

Eq CurveCommon # |
Methods (==) :: CurveCommon -> CurveCommon -> Bool # (/=) :: CurveCommon -> CurveCommon -> Bool #
Data CurveCommon # |
Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> CurveCommon -> c CurveCommon # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c CurveCommon # toConstr :: CurveCommon -> Constr # dataTypeOf :: CurveCommon -> DataType # dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c CurveCommon) # dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CurveCommon) # gmapT :: (forall b. Data b => b -> b) -> CurveCommon -> CurveCommon # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> CurveCommon -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> CurveCommon -> r # gmapQ :: (forall d. Data d => d -> u) -> CurveCommon -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> CurveCommon -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> CurveCommon -> m CurveCommon # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> CurveCommon -> m CurveCommon # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> CurveCommon -> m CurveCommon #
Read CurveCommon # |
Methods readsPrec :: Int -> ReadS CurveCommon # readList :: ReadS [CurveCommon] # readPrec :: ReadPrec CurveCommon # readListPrec :: ReadPrec [CurveCommon] #
Show CurveCommon # |
Methods showsPrec :: Int -> CurveCommon -> ShowS # show :: CurveCommon -> String # showList :: [CurveCommon] -> ShowS #

# recommended curves definition

data CurveName #

Define names for known recommended curves.

Constructors

SEC_p112r1 |
SEC_p112r2 |
SEC_p128r1 |
SEC_p128r2 |
SEC_p160k1 |
SEC_p160r1 |
SEC_p160r2 |
SEC_p192k1 |
SEC_p192r1 |
SEC_p224k1 |
SEC_p224r1 |
SEC_p256k1 |
SEC_p256r1 |
SEC_p384r1 |
SEC_p521r1 |
SEC_t113r1 |
SEC_t113r2 |
SEC_t131r1 |
SEC_t131r2 |
SEC_t163k1 |
SEC_t163r1 |
SEC_t163r2 |
SEC_t193r1 |
SEC_t193r2 |
SEC_t233k1 |
SEC_t233r1 |
SEC_t239k1 |
SEC_t283k1 |
SEC_t283r1 |
SEC_t409k1 |
SEC_t409r1 |
SEC_t571k1 |
SEC_t571r1 |

Instances

Enum CurveName # |
Methods succ :: CurveName -> CurveName # pred :: CurveName -> CurveName # toEnum :: Int -> CurveName # fromEnum :: CurveName -> Int # enumFrom :: CurveName -> [CurveName] # enumFromThen :: CurveName -> CurveName -> [CurveName] # enumFromTo :: CurveName -> CurveName -> [CurveName] # enumFromThenTo :: CurveName -> CurveName -> CurveName -> [CurveName] #
Eq CurveName # |
Methods (==) :: CurveName -> CurveName -> Bool # (/=) :: CurveName -> CurveName -> Bool #
Data CurveName # |
Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> CurveName -> c CurveName # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c CurveName # toConstr :: CurveName -> Constr # dataTypeOf :: CurveName -> DataType # dataCast1 :: Typeable (* -> *) t => (forall d. Data d => c (t d)) -> Maybe (c CurveName) # dataCast2 :: Typeable (* -> * -> *) t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c CurveName) # gmapT :: (forall b. Data b => b -> b) -> CurveName -> CurveName # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> CurveName -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> CurveName -> r # gmapQ :: (forall d. Data d => d -> u) -> CurveName -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> CurveName -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> CurveName -> m CurveName # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> CurveName -> m CurveName # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> CurveName -> m CurveName #
Ord CurveName # |
Methods compare :: CurveName -> CurveName -> Ordering # (<) :: CurveName -> CurveName -> Bool # (<=) :: CurveName -> CurveName -> Bool # (>) :: CurveName -> CurveName -> Bool # (>=) :: CurveName -> CurveName -> Bool # max :: CurveName -> CurveName -> CurveName # min :: CurveName -> CurveName -> CurveName #
Read CurveName # |
Methods readsPrec :: Int -> ReadS CurveName # readList :: ReadS [CurveName] # readPrec :: ReadPrec CurveName # readListPrec :: ReadPrec [CurveName] #
Show CurveName # |
Methods showsPrec :: Int -> CurveName -> ShowS # show :: CurveName -> String # showList :: [CurveName] -> ShowS #
OIDable CurveName # |
Methods getObjectID :: CurveName -> OID #
OIDNameable CurveName # |
Methods fromObjectID :: OID -> Maybe CurveName #

getCurveByName :: CurveName -> Curve #

Get the curve definition associated with a recommended known curve name.