{"id":19517311,"url":"https://github.com/leastauthority/haskell-spake2","last_synced_at":"2025-04-26T06:31:19.824Z","repository":{"id":56246262,"uuid":"91181627","full_name":"LeastAuthority/haskell-spake2","owner":"LeastAuthority","description":"SPAKE2 key exchange protocol for Haskell","archived":false,"fork":false,"pushed_at":"2023-05-24T19:08:02.000Z","size":157,"stargazers_count":14,"open_issues_count":8,"forks_count":4,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-04-17T01:10:06.516Z","etag":null,"topics":["crypto","haskell","spake2"],"latest_commit_sha":null,"homepage":"","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LeastAuthority.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-05-13T14:55:41.000Z","updated_at":"2023-03-27T01:48:58.000Z","dependencies_parsed_at":"2024-11-11T00:02:05.124Z","dependency_job_id":"2c76e05b-64bc-4770-be8f-5a50cf106443","html_url":"https://github.com/LeastAuthority/haskell-spake2","commit_stats":{"total_commits":88,"total_committers":5,"mean_commits":17.6,"dds":0.25,"last_synced_commit":"98b69a54f86a6b524fe46e857080a610df198041"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LeastAuthority%2Fhaskell-spake2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LeastAuthority%2Fhaskell-spake2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LeastAuthority%2Fhaskell-spake2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LeastAuthority%2Fhaskell-spake2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LeastAuthority","download_url":"https://codeload.github.com/LeastAuthority/haskell-spake2/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250944097,"owners_count":21511692,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["crypto","haskell","spake2"],"created_at":"2024-11-11T00:01:46.027Z","updated_at":"2025-04-26T06:31:18.608Z","avatar_url":"https://github.com/LeastAuthority.png","language":"Haskell","readme":"=============================\nHaskell SPAKE2 implementation\n=============================\n\nImplementation of SPAKE2 key exchange protocol.\n\nStatus\n======\n\nWorking implementation that interoperates with python-spake2\nusing the default settings, i.e. with Ed25519.\n\nNo other groups implemented.\n\nGoals\n=====\n\n* compatibility with `python-spake2 \u003chttps://github.com/warner/python-spake2\u003e`_\n* (stretch) submit to `cryptonite \u003chttps://github.com/haskell-crypto/cryptonite\u003e`_\n\nNon-goals\n=========\n\nRight now:\n\n* PAKE2+\n* any `Elligator Edition \u003chttps://moderncrypto.org/mail-archive/curves/2015/000424.html\u003e`_ variants\n\nHow to use it\n=============\n\nThe `interoperability harness entry point \u003ccmd/interop-entrypoint/Main.hs\u003e`_\nis the best working example of how to use the code.\n\nThe `main module documentation \u003csrc/Crypto/Spake2.hs\u003e`_ might also help.\n\nTesting for interoperability\n----------------------------\n\nRequires the `LeastAuthority interoperability harness \u003chttps://github.com/leastauthority/spake2-interop-test\u003e`_.\n\nAssumes that haskell-spake2 has been compiled (``stack build`` will do it)\nand that you know where the executable lives (``stack install`` might be helpful here).\n\n.. these instructions are not yet verified\n\nTo show that Python works as Side A and Haskell works as Side B:\n\n.. code-block:: console\n\n   $ runhaskell TestInterop.hs ./python-spake2-interop-entrypoint.hs A abc -- /path/to/haskell-spake2-interop-entrypoint B abc\n   [\"./python-spake2-interop-entrypoint.py\",\"A\",\"abc\"]\n   [\"/path/to/haskell-spake2-interop-entrypoint\",\"B\",\"abc\"]\n   A's key: 8a2e19664f0a2bc6e446d2c44900c67604fe42f6d7e0a1328a5253b21f4131a5\n   B's key: 8a2e19664f0a2bc6e446d2c44900c67604fe42f6d7e0a1328a5253b21f4131a5\n   Session keys match.\n\n**Note**: if you want to run ``runhaskell`` with ``stack``,\nyou will need to invoke it like::\n\n   stack runhaskell TestInterop.hs -- ./python-spake2-interop-entrypoint.hs A abc -- /path/to/haskell-spake2-interop-entrypoint B abc\n\nThe above results are genuine,\nand demonstrate that the Haskell SPAKE2 implementation *does* work.\nSpecifically, that it interoperates with python-spake2.\n\nContributing\n============\n\nWe use `stack \u003chttps://docs.haskellstack.org/en/stable/GUIDE/\u003e`_ for building and testing.\n\nHigh-quality documentation with examples is very strongly encouraged,\nbecause this stuff is pretty hard to figure out, and we need all the help we can get.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleastauthority%2Fhaskell-spake2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleastauthority%2Fhaskell-spake2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleastauthority%2Fhaskell-spake2/lists"}