License | BSD-style |
---|---|

Maintainer | Vincent Hanquez <vincent@snarc.org> |

Stability | experimental |

Portability | unknown |

Safe Haskell | None |

Language | Haskell2010 |

IES with Elliptic curve https://en.wikipedia.org/wiki/Integrated_Encryption_Scheme

This is a simple cryptographic system between 2 parties using Elliptic Curve.

The sending party create a shared secret using the receiver public key, and use the shared secret to generate cryptographic material for an symmetric encryption scheme (preferably authenticated encryption).

The receiving party receive the temporary ephemeral public key which is combined to its secret key to create the shared secret which just like on the sending is used to generate cryptographic material.

This module doesn't provide any symmetric data encryption capability or any mean to derive cryptographic key material for a symmetric key from the shared secret. this is left to the user for now.

- deriveEncrypt :: (MonadRandom randomly, EllipticCurveDH curve) => proxy curve -> Point curve -> randomly (CryptoFailable (Point curve, SharedSecret))
- deriveDecrypt :: EllipticCurveDH curve => proxy curve -> Point curve -> Scalar curve -> CryptoFailable SharedSecret

# Documentation

:: (MonadRandom randomly, EllipticCurveDH curve) | |

=> proxy curve | representation of the curve |

-> Point curve | the public key of the receiver |

-> randomly (CryptoFailable (Point curve, SharedSecret)) |

Generate random a new Shared secret and the associated point to do a ECIES style encryption

:: EllipticCurveDH curve | |

=> proxy curve | representation of the curve |

-> Point curve | The received R (supposedly, randomly generated on the encrypt side) |

-> Scalar curve | The secret key of the receiver |

-> CryptoFailable SharedSecret |

Derive the shared secret with the receiver key and the R point of the scheme.