Safe Haskell | None |
---|---|

Language | Haskell2010 |

Elliptic Curve Arithmetic.

*WARNING:* These functions are vulnerable to timing attacks.

## Synopsis

- scalarGenerate :: MonadRandom randomly => Curve -> randomly PrivateNumber
- pointAdd :: Curve -> Point -> Point -> Point
- pointNegate :: Curve -> Point -> Point
- pointDouble :: Curve -> Point -> Point
- pointBaseMul :: Curve -> Integer -> Point
- pointMul :: Curve -> Integer -> Point -> Point
- pointAddTwoMuls :: Curve -> Integer -> Point -> Integer -> Point -> Point
- isPointAtInfinity :: Point -> Bool
- isPointValid :: Curve -> Point -> Bool

# Documentation

scalarGenerate :: MonadRandom randomly => Curve -> randomly PrivateNumber Source #

Generate a valid scalar for a specific Curve

pointAdd :: Curve -> Point -> Point -> Point Source #

Elliptic Curve point addition.

*WARNING:* Vulnerable to timing attacks.

pointNegate :: Curve -> Point -> Point Source #

Elliptic Curve point negation:
`pointNegate c p`

returns point `q`

such that `pointAdd c p q == PointO`

.

pointDouble :: Curve -> Point -> Point Source #

Elliptic Curve point doubling.

*WARNING:* Vulnerable to timing attacks.

This perform the following calculation: > lambda = (3 * xp ^ 2 + a) / 2 yp > xr = lambda ^ 2 - 2 xp > yr = lambda (xp - xr) - yp

With binary curve: > xp == 0 => P = O > otherwise => > s = xp + (yp / xp) > xr = s ^ 2 + s + a > yr = xp ^ 2 + (s+1) * xr

pointBaseMul :: Curve -> Integer -> Point Source #

Elliptic curve point multiplication using the base

*WARNING:* Vulnerable to timing attacks.

pointMul :: Curve -> Integer -> Point -> Point Source #

Elliptic curve point multiplication (double and add algorithm).

*WARNING:* Vulnerable to timing attacks.

pointAddTwoMuls :: Curve -> Integer -> Point -> Integer -> Point -> Point Source #

Elliptic curve double-scalar multiplication (uses Shamir's trick).

pointAddTwoMuls c n1 p1 n2 p2 == pointAdd c (pointMul c n1 p1) (pointMul c n2 p2)

*WARNING:* Vulnerable to timing attacks.

isPointAtInfinity :: Point -> Bool Source #

Check if a point is the point at infinity.