cryptonite-0.21: Cryptography Primitives sink

LicenseBSD-style
MaintainerVincent Hanquez <vincent@snarc.org>
Stabilityexperimental
Portabilityunknown
Safe HaskellNone
LanguageHaskell2010

Crypto.ECC

Description

Elliptic Curve Cryptography

Synopsis

Documentation

class EllipticCurve curve where

Associated Types

type Point curve :: *

Point on an Elliptic Curve

type Scalar curve :: *

Scalar in the Elliptic Curve domain

Methods

curveGenerateScalar :: MonadRandom randomly => proxy curve -> randomly (Scalar curve)

Generate a new random scalar on the curve. The scalar will represent a number between 1 and the order of the curve non included

curveGenerateKeyPair :: MonadRandom randomly => proxy curve -> randomly (KeyPair curve)

Generate a new random keypair

curveSizeBits :: proxy curve -> Int

Get the curve size in bits

encodePoint :: ByteArray bs => proxy curve -> Point curve -> bs

Encode a elliptic curve point into binary form

decodePoint :: ByteArray bs => proxy curve -> bs -> CryptoFailable (Point curve)

Try to decode the binary form of an elliptic curve point

class EllipticCurve curve => EllipticCurveDH curve where

Methods

ecdh :: proxy curve -> Scalar curve -> Point curve -> SharedSecret

Generate a Diffie hellman secret value.

This is generally just the .x coordinate of the resulting point, that is not hashed.

use pointSmul to keep the result in Point format.

class EllipticCurve curve => EllipticCurveArith curve where

Methods

pointAdd :: proxy curve -> Point curve -> Point curve -> Point curve

Add points on a curve

pointSmul :: proxy curve -> Scalar curve -> Point curve -> Point curve

Scalar Multiplication on a curve

data KeyPair curve

An elliptic curve key pair composed of the private part (a scalar), and the associated point.

Constructors

KeyPair 

Fields

keypairGetPublic :: !(Point curve)
 
keypairGetPrivate :: !(Scalar curve)