License | BSD-style |
---|---|
Maintainer | Vincent Hanquez <vincent@snarc.org> |
Stability | experimental |
Portability | unknown |
Safe Haskell | None |
Language | Haskell2010 |
Elliptic Curve Cryptography
- data Curve_P256R1 = Curve_P256R1
- data Curve_P384R1 = Curve_P384R1
- data Curve_P521R1 = Curve_P521R1
- data Curve_X25519 = Curve_X25519
- data Curve_X448 = Curve_X448
- class EllipticCurve curve where
- type Point curve :: *
- type Scalar curve :: *
- curveGenerateScalar :: MonadRandom randomly => proxy curve -> randomly (Scalar curve)
- curveGenerateKeyPair :: MonadRandom randomly => proxy curve -> randomly (KeyPair curve)
- curveSizeBits :: proxy curve -> Int
- encodePoint :: ByteArray bs => proxy curve -> Point curve -> bs
- decodePoint :: ByteArray bs => proxy curve -> bs -> CryptoFailable (Point curve)
- class EllipticCurve curve => EllipticCurveDH curve where
- ecdh :: proxy curve -> Scalar curve -> Point curve -> SharedSecret
- class EllipticCurve curve => EllipticCurveArith curve where
- data KeyPair curve = KeyPair {
- keypairGetPublic :: !(Point curve)
- keypairGetPrivate :: !(Scalar curve)
- newtype SharedSecret = SharedSecret ScrubbedBytes
Documentation
data Curve_P256R1
P256 Curve
also known as P256
data Curve_P384R1
data Curve_P521R1
data Curve_X25519
data Curve_X448
class EllipticCurve curve where
type Point curve :: *
Point on an Elliptic Curve
type Scalar curve :: *
Scalar in the Elliptic Curve domain
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
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
data KeyPair curve
An elliptic curve key pair composed of the private part (a scalar), and the associated point.
KeyPair | |
|