License | BSD-style |
---|---|
Maintainer | Vincent Hanquez <vincent@snarc.org> |
Stability | experimental |
Portability | unknown |
Safe Haskell | None |
Language | Haskell2010 |
P256 support
Synopsis
- data Scalar
- data Point
- pointBase :: Point
- pointAdd :: Point -> Point -> Point
- pointNegate :: Point -> Point
- pointMul :: Scalar -> Point -> Point
- pointDh :: ByteArray binary => Scalar -> Point -> binary
- pointsMulVarTime :: Scalar -> Scalar -> Point -> Point
- pointIsValid :: Point -> Bool
- pointIsAtInfinity :: Point -> Bool
- toPoint :: Scalar -> Point
- pointX :: Point -> Maybe Scalar
- pointToIntegers :: Point -> (Integer, Integer)
- pointFromIntegers :: (Integer, Integer) -> Point
- pointToBinary :: ByteArray ba => Point -> ba
- pointFromBinary :: ByteArrayAccess ba => ba -> CryptoFailable Point
- unsafePointFromBinary :: ByteArrayAccess ba => ba -> CryptoFailable Point
- scalarGenerate :: MonadRandom randomly => randomly Scalar
- scalarZero :: Scalar
- scalarN :: Scalar
- scalarIsZero :: Scalar -> Bool
- scalarAdd :: Scalar -> Scalar -> Scalar
- scalarSub :: Scalar -> Scalar -> Scalar
- scalarMul :: Scalar -> Scalar -> Scalar
- scalarInv :: Scalar -> Scalar
- scalarInvSafe :: Scalar -> Scalar
- scalarCmp :: Scalar -> Scalar -> Ordering
- scalarFromBinary :: ByteArrayAccess ba => ba -> CryptoFailable Scalar
- scalarToBinary :: ByteArray ba => Scalar -> ba
- scalarFromInteger :: Integer -> CryptoFailable Scalar
- scalarToInteger :: Scalar -> Integer
Documentation
A P256 scalar
Point arithmetic
pointNegate :: Point -> Point #
Negate a point
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
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
scalarIsZero :: Scalar -> Bool #
Check if the scalar is 0
scalarInvSafe :: Scalar -> Scalar #
Give the inverse of the scalar using safe exponentiation
1 / a
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