https://github.com/leastauthority/haskell-spake2
SPAKE2 key exchange protocol for Haskell
https://github.com/leastauthority/haskell-spake2
crypto haskell spake2
Last synced: 6 months ago
JSON representation
SPAKE2 key exchange protocol for Haskell
- Host: GitHub
- URL: https://github.com/leastauthority/haskell-spake2
- Owner: LeastAuthority
- License: apache-2.0
- Created: 2017-05-13T14:55:41.000Z (over 8 years ago)
- Default Branch: main
- Last Pushed: 2023-05-24T19:08:02.000Z (over 2 years ago)
- Last Synced: 2025-04-17T01:10:06.516Z (6 months ago)
- Topics: crypto, haskell, spake2
- Language: Haskell
- Homepage:
- Size: 153 KB
- Stars: 14
- Watchers: 8
- Forks: 4
- Open Issues: 8
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
=============================
Haskell SPAKE2 implementation
=============================
Implementation of SPAKE2 key exchange protocol.
Status
======
Working implementation that interoperates with python-spake2
using the default settings, i.e. with Ed25519.
No other groups implemented.
Goals
=====
* compatibility with `python-spake2 `_
* (stretch) submit to `cryptonite `_
Non-goals
=========
Right now:
* PAKE2+
* any `Elligator Edition `_ variants
How to use it
=============
The `interoperability harness entry point `_
is the best working example of how to use the code.
The `main module documentation `_ might also help.
Testing for interoperability
----------------------------
Requires the `LeastAuthority interoperability harness `_.
Assumes that haskell-spake2 has been compiled (``stack build`` will do it)
and that you know where the executable lives (``stack install`` might be helpful here).
.. these instructions are not yet verified
To show that Python works as Side A and Haskell works as Side B:
.. code-block:: console
$ runhaskell TestInterop.hs ./python-spake2-interop-entrypoint.hs A abc -- /path/to/haskell-spake2-interop-entrypoint B abc
["./python-spake2-interop-entrypoint.py","A","abc"]
["/path/to/haskell-spake2-interop-entrypoint","B","abc"]
A's key: 8a2e19664f0a2bc6e446d2c44900c67604fe42f6d7e0a1328a5253b21f4131a5
B's key: 8a2e19664f0a2bc6e446d2c44900c67604fe42f6d7e0a1328a5253b21f4131a5
Session keys match.
**Note**: if you want to run ``runhaskell`` with ``stack``,
you will need to invoke it like::
stack runhaskell TestInterop.hs -- ./python-spake2-interop-entrypoint.hs A abc -- /path/to/haskell-spake2-interop-entrypoint B abc
The above results are genuine,
and demonstrate that the Haskell SPAKE2 implementation *does* work.
Specifically, that it interoperates with python-spake2.
Contributing
============
We use `stack `_ for building and testing.
High-quality documentation with examples is very strongly encouraged,
because this stuff is pretty hard to figure out, and we need all the help we can get.