-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Generic cryptography Public keys algorithm types
--   
--   Generic cryptography public keys algorithm types
@package crypto-pubkey-types
@version 0.4.1


module Crypto.Types.PubKey.ECC

-- | Define either a binary curve or a prime curve.
data Curve

-- | 𝔽(2^m)
CurveF2m :: CurveBinary -> Curve

-- | 𝔽p
CurveFP :: CurvePrime -> Curve

-- | Define a point on a curve.
data Point
Point :: Integer -> Integer -> Point

-- | Point at Infinity
PointO :: Point

-- | Define an elliptic curve in 𝔽(2^m). The firt parameter is the Integer
--   representatioin of the irreducible polynomial f(x).
data CurveBinary
CurveBinary :: Integer -> CurveCommon -> CurveBinary

-- | Define an elliptic curve in 𝔽p. The first parameter is the Prime
--   Number.
data CurvePrime
CurvePrime :: Integer -> CurveCommon -> CurvePrime

-- | Parameters in common between binary and prime curves.
common_curve :: Curve -> CurveCommon

-- | Irreducible polynomial representing the characteristic of a
--   CurveBinary.
ecc_fx :: CurveBinary -> Integer

-- | Prime number representing the characteristic of a CurvePrime.
ecc_p :: CurvePrime -> Integer

-- | Define common parameters in a curve definition of the form: y^2 = x^3
--   + ax + b.
data CurveCommon
CurveCommon :: Integer -> Integer -> Point -> Integer -> Integer -> CurveCommon

-- | curve parameter a
ecc_a :: CurveCommon -> Integer

-- | curve parameter b
ecc_b :: CurveCommon -> Integer

-- | base point
ecc_g :: CurveCommon -> Point

-- | order of G
ecc_n :: CurveCommon -> Integer

-- | cofactor
ecc_h :: CurveCommon -> Integer

-- | Define names for known recommended curves.
data CurveName
SEC_p112r1 :: CurveName
SEC_p112r2 :: CurveName
SEC_p128r1 :: CurveName
SEC_p128r2 :: CurveName
SEC_p160k1 :: CurveName
SEC_p160r1 :: CurveName
SEC_p160r2 :: CurveName
SEC_p192k1 :: CurveName
SEC_p192r1 :: CurveName
SEC_p224k1 :: CurveName
SEC_p224r1 :: CurveName
SEC_p256k1 :: CurveName
SEC_p256r1 :: CurveName
SEC_p384r1 :: CurveName
SEC_p521r1 :: CurveName
SEC_t113r1 :: CurveName
SEC_t113r2 :: CurveName
SEC_t131r1 :: CurveName
SEC_t131r2 :: CurveName
SEC_t163k1 :: CurveName
SEC_t163r1 :: CurveName
SEC_t163r2 :: CurveName
SEC_t193r1 :: CurveName
SEC_t193r2 :: CurveName
SEC_t233k1 :: CurveName
SEC_t233r1 :: CurveName
SEC_t239k1 :: CurveName
SEC_t283k1 :: CurveName
SEC_t283r1 :: CurveName
SEC_t409k1 :: CurveName
SEC_t409r1 :: CurveName
SEC_t571k1 :: CurveName
SEC_t571r1 :: CurveName

-- | Get the curve definition associated with a recommended known curve
--   name.
getCurveByName :: CurveName -> Curve
instance Typeable Point
instance Typeable CurveCommon
instance Typeable CurvePrime
instance Typeable CurveBinary
instance Typeable Curve
instance Show Point
instance Read Point
instance Eq Point
instance Data Point
instance Show CurveCommon
instance Read CurveCommon
instance Eq CurveCommon
instance Data CurveCommon
instance Show CurvePrime
instance Read CurvePrime
instance Eq CurvePrime
instance Data CurvePrime
instance Show CurveBinary
instance Read CurveBinary
instance Eq CurveBinary
instance Data CurveBinary
instance Show Curve
instance Read Curve
instance Eq Curve
instance Data Curve
instance Show CurveName
instance Eq CurveName
instance Ord CurveName
instance Enum CurveName


module Crypto.Types.PubKey.ECDSA

-- | Represent a ECDSA signature namely R and S.
data Signature
Signature :: Integer -> Integer -> Signature

-- | ECDSA r
sign_r :: Signature -> Integer

-- | ECDSA s
sign_s :: Signature -> Integer

-- | ECDSA Public Point, usually embedded in ECDSA Public Key.
type PublicPoint = Point

-- | ECDSA Public Key.
data PublicKey
PublicKey :: Curve -> PublicPoint -> PublicKey
public_curve :: PublicKey -> Curve
public_q :: PublicKey -> PublicPoint

-- | ECDSA Private Number, usually embedded in ECDSA Private Key.
type PrivateNumber = Integer

-- | ECDSA Private Key.
data PrivateKey
PrivateKey :: Curve -> PrivateNumber -> PrivateKey
private_curve :: PrivateKey -> Curve
private_d :: PrivateKey -> PrivateNumber

-- | ECDSA Key Pair.
data KeyPair
KeyPair :: Curve -> PublicPoint -> PrivateNumber -> KeyPair

-- | Public key of a ECDSA Key pair.
toPublicKey :: KeyPair -> PublicKey

-- | Private key of a ECDSA Key pair.
toPrivateKey :: KeyPair -> PrivateKey
instance Typeable Signature
instance Typeable PrivateKey
instance Typeable PublicKey
instance Typeable KeyPair
instance Show Signature
instance Read Signature
instance Eq Signature
instance Data Signature
instance Show PrivateKey
instance Read PrivateKey
instance Eq PrivateKey
instance Data PrivateKey
instance Show PublicKey
instance Read PublicKey
instance Eq PublicKey
instance Data PublicKey
instance Show KeyPair
instance Read KeyPair
instance Eq KeyPair
instance Data KeyPair


module Crypto.Types.PubKey.DH

-- | Represent Diffie Hellman parameters namely P (prime), and G
--   (generator).
data Params
Params :: Integer -> Integer -> Params
params_p :: Params -> Integer
params_g :: Params -> Integer

-- | Represent Diffie Hellman public number Y.
newtype PublicNumber
PublicNumber :: Integer -> PublicNumber

-- | Represent Diffie Hellman private number X.
newtype PrivateNumber
PrivateNumber :: Integer -> PrivateNumber

-- | Represent Diffie Hellman shared secret.
newtype SharedKey
SharedKey :: Integer -> SharedKey
instance Typeable Params
instance Show Params
instance Read Params
instance Eq Params
instance Data Params
instance Show PublicNumber
instance Read PublicNumber
instance Eq PublicNumber
instance Enum PublicNumber
instance Real PublicNumber
instance Num PublicNumber
instance Ord PublicNumber
instance Show PrivateNumber
instance Read PrivateNumber
instance Eq PrivateNumber
instance Enum PrivateNumber
instance Real PrivateNumber
instance Num PrivateNumber
instance Ord PrivateNumber
instance Show SharedKey
instance Read SharedKey
instance Eq SharedKey
instance Enum SharedKey
instance Real SharedKey
instance Num SharedKey
instance Ord SharedKey
instance ASN1Object Params


module Crypto.Types.PubKey.DSA

-- | Represent DSA parameters namely P, G, and Q.
data Params
Params :: Integer -> Integer -> Integer -> Params

-- | DSA p
params_p :: Params -> Integer

-- | DSA g
params_g :: Params -> Integer

-- | DSA q
params_q :: Params -> Integer

-- | Represent a DSA signature namely R and S.
data Signature
Signature :: Integer -> Integer -> Signature

-- | DSA r
sign_r :: Signature -> Integer

-- | DSA s
sign_s :: Signature -> Integer

-- | DSA Public Number, usually embedded in DSA Public Key
type PublicNumber = Integer

-- | Represent a DSA public key.
data PublicKey
PublicKey :: Params -> PublicNumber -> PublicKey

-- | DSA parameters
public_params :: PublicKey -> Params

-- | DSA public Y
public_y :: PublicKey -> PublicNumber

-- | DSA Private Number, usually embedded in DSA Private Key
type PrivateNumber = Integer

-- | Represent a DSA private key.
--   
--   Only x need to be secret. the DSA parameters are publicly shared with
--   the other side.
data PrivateKey
PrivateKey :: Params -> PrivateNumber -> PrivateKey

-- | DSA parameters
private_params :: PrivateKey -> Params

-- | DSA private X
private_x :: PrivateKey -> PrivateNumber

-- | Represent a DSA key pair
data KeyPair
KeyPair :: Params -> PublicNumber -> PrivateNumber -> KeyPair

-- | Public key of a DSA Key pair
toPublicKey :: KeyPair -> PublicKey

-- | Private key of a DSA Key pair
toPrivateKey :: KeyPair -> PrivateKey
instance Typeable Params
instance Typeable Signature
instance Typeable PublicKey
instance Typeable PrivateKey
instance Typeable KeyPair
instance Show Params
instance Read Params
instance Eq Params
instance Data Params
instance Show Signature
instance Read Signature
instance Eq Signature
instance Data Signature
instance Show PublicKey
instance Read PublicKey
instance Eq PublicKey
instance Data PublicKey
instance Show PrivateKey
instance Read PrivateKey
instance Eq PrivateKey
instance Data PrivateKey
instance Show KeyPair
instance Read KeyPair
instance Eq KeyPair
instance Data KeyPair
instance ASN1Object KeyPair
instance ASN1Object PublicKey
instance ASN1Object Signature
instance ASN1Object Params


module Crypto.Types.PubKey.RSA

-- | Represent a RSA public key
data PublicKey
PublicKey :: Int -> Integer -> Integer -> PublicKey

-- | size of key in bytes
public_size :: PublicKey -> Int

-- | public p*q
public_n :: PublicKey -> Integer

-- | public exponant e
public_e :: PublicKey -> Integer

-- | Represent a RSA private key.
--   
--   Only the pub, d fields are mandatory to fill.
--   
--   p, q, dP, dQ, qinv are by-product during RSA generation, but are
--   useful to record here to speed up massively the decrypt and sign
--   operation.
--   
--   implementations can leave optional fields to 0.
data PrivateKey
PrivateKey :: PublicKey -> Integer -> Integer -> Integer -> Integer -> Integer -> Integer -> PrivateKey

-- | public part of a private key (size, n and e)
private_pub :: PrivateKey -> PublicKey

-- | private exponant d
private_d :: PrivateKey -> Integer

-- | p prime number
private_p :: PrivateKey -> Integer

-- | q prime number
private_q :: PrivateKey -> Integer

-- | d mod (p-1)
private_dP :: PrivateKey -> Integer

-- | d mod (q-1)
private_dQ :: PrivateKey -> Integer

-- | q^(-1) mod p
private_qinv :: PrivateKey -> Integer

-- | Represent RSA KeyPair
--   
--   note the RSA private key contains already an instance of public key
--   for efficiency
newtype KeyPair
KeyPair :: PrivateKey -> KeyPair

-- | get the size in bytes from a private key
private_size :: PrivateKey -> Int

-- | get n from a private key
private_n :: PrivateKey -> Integer

-- | Public key of a RSA KeyPair
toPublicKey :: KeyPair -> PublicKey

-- | Private key of a RSA KeyPair
toPrivateKey :: KeyPair -> PrivateKey
instance Typeable PublicKey
instance Typeable PrivateKey
instance Typeable KeyPair
instance Show PublicKey
instance Read PublicKey
instance Eq PublicKey
instance Data PublicKey
instance Show PrivateKey
instance Read PrivateKey
instance Eq PrivateKey
instance Data PrivateKey
instance Show KeyPair
instance Read KeyPair
instance Eq KeyPair
instance Data KeyPair
instance ASN1Object KeyPair
instance ASN1Object PrivateKey
instance ASN1Object PublicKey
