cryptonite-0.29: Cryptography Primitives sink
LicenseBSD-style
MaintainerVincent Hanquez <vincent@snarc.org>
Stabilityexperimental
Portabilityunknown
Safe HaskellNone
LanguageHaskell2010

Crypto.PubKey.ECC.P256

Description

P256 support

Synopsis

Documentation

data Scalar #

A P256 scalar

Instances

Instances details
Eq Scalar # 
Instance details

Defined in Crypto.PubKey.ECC.P256

Methods

(==) :: Scalar -> Scalar -> Bool #

(/=) :: Scalar -> Scalar -> Bool #

Show Scalar # 
Instance details

Defined in Crypto.PubKey.ECC.P256

NFData Scalar # 
Instance details

Defined in Crypto.PubKey.ECC.P256

Methods

rnf :: Scalar -> () #

ByteArrayAccess Scalar # 
Instance details

Defined in Crypto.PubKey.ECC.P256

Methods

length :: Scalar -> Int #

withByteArray :: Scalar -> (Ptr p -> IO a) -> IO a #

copyByteArrayToPtr :: Scalar -> Ptr p -> IO () #

data Point #

A P256 point

Instances

Instances details
Eq Point # 
Instance details

Defined in Crypto.PubKey.ECC.P256

Methods

(==) :: Point -> Point -> Bool #

(/=) :: Point -> Point -> Bool #

Show Point # 
Instance details

Defined in Crypto.PubKey.ECC.P256

Methods

showsPrec :: Int -> Point -> ShowS #

show :: Point -> String #

showList :: [Point] -> ShowS #

NFData Point # 
Instance details

Defined in Crypto.PubKey.ECC.P256

Methods

rnf :: Point -> () #

Point arithmetic

pointBase :: Point #

Get the base point for the P256 Curve

pointAdd :: Point -> Point -> Point #

Add a point to another point

pointNegate :: Point -> Point #

Negate a point

pointMul :: Scalar -> Point -> Point #

Multiply a point by a scalar

warning: variable time

pointDh :: ByteArray binary => Scalar -> Point -> binary #

Similar to pointMul, serializing the x coordinate as binary. When scalar is multiple of point order the result is all zero.

pointsMulVarTime :: Scalar -> Scalar -> Point -> Point #

multiply the point p with n2 and add a lifted to curve value @n1

n1 * G + n2 * p

warning: variable time

pointIsValid :: Point -> Bool #

Check if a Point is valid

pointIsAtInfinity :: Point -> Bool #

Check if a Point is the point at infinity

toPoint :: Scalar -> Point #

Lift to curve a scalar

Using the curve generator as base point compute:

scalar * G

pointX :: Point -> Maybe Scalar #

Return the x coordinate as a Scalar if the point is not at infinity

pointToIntegers :: Point -> (Integer, Integer) #

Convert a point to (x,y) Integers

pointFromIntegers :: (Integer, Integer) -> Point #

Convert from (x,y) Integers to a point

pointToBinary :: ByteArray ba => Point -> ba #

Convert a point to a binary representation

pointFromBinary :: ByteArrayAccess ba => ba -> CryptoFailable Point #

Convert from binary to a valid point

unsafePointFromBinary :: ByteArrayAccess ba => ba -> CryptoFailable Point #

Convert from binary to a point, possibly invalid

Scalar arithmetic

scalarGenerate :: MonadRandom randomly => randomly Scalar #

Generate a randomly generated new scalar

scalarZero :: Scalar #

The scalar representing 0

scalarN :: Scalar #

The scalar representing the curve order

scalarIsZero :: Scalar -> Bool #

Check if the scalar is 0

scalarAdd :: Scalar -> Scalar -> Scalar #

Perform addition between two scalars

a + b

scalarSub :: Scalar -> Scalar -> Scalar #

Perform subtraction between two scalars

a - b

scalarMul :: Scalar -> Scalar -> Scalar #

Perform multiplication between two scalars

a * b

scalarInv :: Scalar -> Scalar #

Give the inverse of the scalar

1 / a

warning: variable time

scalarInvSafe :: Scalar -> Scalar #

Give the inverse of the scalar using safe exponentiation

1 / a

scalarCmp :: Scalar -> Scalar -> Ordering #

Compare 2 Scalar

scalarFromBinary :: ByteArrayAccess ba => ba -> CryptoFailable Scalar #

convert a scalar from binary

scalarToBinary :: ByteArray ba => Scalar -> ba #

convert a scalar to binary

scalarFromInteger :: Integer -> CryptoFailable Scalar #

Convert from an Integer to a P256 Scalar

scalarToInteger :: Scalar -> Integer #

Convert from a P256 Scalar to an Integer