{"id":28489791,"url":"https://github.com/backkem/spake2-go","last_synced_at":"2025-07-22T14:34:37.641Z","repository":{"id":296012395,"uuid":"989164969","full_name":"backkem/spake2-go","owner":"backkem","description":"An RFC9382 Spake2 implementation","archived":false,"fork":false,"pushed_at":"2025-05-29T20:58:54.000Z","size":1548,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-19T16:40:27.169Z","etag":null,"topics":["rfc9382","spake2"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/backkem.png","metadata":{"files":{"readme":"README.md","changelog":null,"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,"zenodo":null}},"created_at":"2025-05-23T16:56:45.000Z","updated_at":"2025-05-29T18:29:25.000Z","dependencies_parsed_at":"2025-05-28T15:55:29.769Z","dependency_job_id":null,"html_url":"https://github.com/backkem/spake2-go","commit_stats":null,"previous_names":["backkem/spake2-go"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/backkem/spake2-go","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/backkem%2Fspake2-go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/backkem%2Fspake2-go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/backkem%2Fspake2-go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/backkem%2Fspake2-go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/backkem","download_url":"https://codeload.github.com/backkem/spake2-go/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/backkem%2Fspake2-go/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266510687,"owners_count":23940696,"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","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["rfc9382","spake2"],"created_at":"2025-06-08T07:06:17.032Z","updated_at":"2025-07-22T14:34:37.631Z","avatar_url":"https://github.com/backkem.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SPAKE2\n\n[![GoDoc](https://godoc.org/github.com/backkem/spake2-go?status.svg)](https://godoc.org/github.com/backkem/spake2-go)\n[![Build Status](https://github.com/backkem/spake2-go/actions/workflows/ci.yml/badge.svg)](https://github.com/backkem/spake2-go/actions/workflows/ci.yml)\n\nA Go implementation of the SPAKE2 password-authenticated key exchange protocol.\n\n## Overview\n\nSPAKE2 is a secure, password-authenticated key exchange protocol that allows two parties to establish a shared secret key based on a low-entropy password without revealing the password to an eavesdropper. This implementation provides both client and server components for the SPAKE2 protocol.\n\n⚠️ **Security Warning**: While this implementation has been tested against the official RFC 9382 test vectors for correctness, it has not undergone formal security review or audit for vulnerabilities. Use at your own risk in production environments. Consider having the code reviewed by security experts before deploying in security-critical applications.\n\n## Features\n\n- Implements the SPAKE2 protocol as described in [RFC 9382](https://www.rfc-editor.org/rfc/rfc9382).\n- Tested against the test vectors provided in the RFC.\n\n## Installation\n\nTo use this package in your Go project, you can install it using `go get`:\n\n```bash\ngo get github.com/backkem/spake2-go\n```\n\n## Usage\n\nHere's a basic example of how to use the SPAKE2 package:\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"github.com/backkem/spake2-go\"\n)\n\nfunc main() {\n\tpassword := []byte(\"shared-password\")\n\n\t// Create client and server instances\n\tclient := spake2.NewClient(password, nil)\n\tserver := spake2.NewServer(password, nil)\n\n\t// Client starts the protocol\n\tclientMsg, err := client.Start()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\t// Server processes client's message\n\tserverMsg, err := server.Exchange(clientMsg)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\t// Client processes server's message\n\tclientConfirm, err := client.Finish(serverMsg)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\t// Server confirms client's message\n\tserverConfirm, err := server.Confirm(clientConfirm)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\t// Client verifies server's confirmation\n\terr = client.Verify(serverConfirm)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\t// Both parties can now access the shared key\n\tclientKey, _ := client.SharedKey()\n\tserverKey, _ := server.SharedKey()\n\n\tfmt.Printf(\"Client Shared Key: %x\\n\", clientKey)\n\tfmt.Printf(\"Server Shared Key: %x\\n\", serverKey)\n}\n```\n\n## Protocol Flow\n\nBelow is a simplified flow of the SPAKE2 protocol exchange between client and server:\n\n```mermaid\nsequenceDiagram\n    participant C as Client\n    participant S as Server\n    C-\u003e\u003eS: Start (Client Message)\n    S-\u003e\u003eC: Exchange (Server Message)\n    C-\u003e\u003eS: Finish (Client Confirm)\n    S-\u003e\u003eC: Confirm (Server Confirm)\n    C-\u003e\u003eC: Verify\n    Note over C,S: Shared Key Established\n```\n\n## Documentation\n\nFull documentation is available on [GoDoc](https://godoc.org/github.com/backkem/spake2-go).\n\n## License\n\nThis project is licensed under the MIT License - see the LICENSE file for details.\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbackkem%2Fspake2-go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbackkem%2Fspake2-go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbackkem%2Fspake2-go/lists"}