{"id":20523545,"url":"https://github.com/awnumar/agekd","last_synced_at":"2025-06-24T00:35:34.430Z","repository":{"id":261997281,"uuid":"885922699","full_name":"awnumar/agekd","owner":"awnumar","description":"Go library for deriving age X25519 identities deterministically from keys or passwords.","archived":false,"fork":false,"pushed_at":"2025-01-13T21:21:00.000Z","size":24,"stargazers_count":33,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-07T09:21:15.917Z","etag":null,"topics":["age-encryption"],"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/awnumar.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":"2024-11-09T18:41:41.000Z","updated_at":"2025-03-09T19:17:59.000Z","dependencies_parsed_at":"2024-11-09T20:33:51.451Z","dependency_job_id":"42c51468-b937-4ba2-9aa8-3acd1012f4c2","html_url":"https://github.com/awnumar/agekd","commit_stats":null,"previous_names":["awnumar/agekd"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/awnumar/agekd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awnumar%2Fagekd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awnumar%2Fagekd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awnumar%2Fagekd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awnumar%2Fagekd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/awnumar","download_url":"https://codeload.github.com/awnumar/agekd/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/awnumar%2Fagekd/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261583278,"owners_count":23180641,"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":["age-encryption"],"created_at":"2024-11-15T22:43:28.664Z","updated_at":"2025-06-24T00:35:34.398Z","avatar_url":"https://github.com/awnumar.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# Age (Deterministic) Key Derivation\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/awnumar/agekd.svg)](https://pkg.go.dev/github.com/awnumar/agekd) [![Go workflow](https://github.com/awnumar/agekd/actions/workflows/go.yml/badge.svg?branch=main)](https://github.com/awnumar/agekd/actions/workflows/go.yml)\n\nAgeKD is a Go library that can be used to derive [`age`](https://github.com/FiloSottile/age) X25519 identities deterministically from keys or passwords.\n\nThis package **does not** provide a CLI. If you need that functionality, check out [age-keygen-deterministic](https://github.com/keisentraut/age-keygen-deterministic).\n\nSee the upstream `age` [documentation](https://pkg.go.dev/filippo.io/age) for further guidance on working with `age` identities and recipients.\n\n## When would you use this?\n\n- You already have key material and want to use it for age operations.\n- Your execution environment has the capability to generate cryptographically secure keys, but it prevents your program from persisting custom keys.\n- You want to programmatically derive age identities from passwords.\n\n## Installation\n\nInside your project folder, run:\n\n```sh\ngo get github.com/awnumar/agekd\n```\n\n## Usage\n\nTo generate an age identity from a high-entropy key:\n\n```go\nidentity, err := agekd.X25519IdentityFromKey(key, nil)\nif err != nil {\n    // handle error\n}\n_ = identity // *age.X25519Identity\n```\n\nTo generate multiple age identities from a single key, specify a salt:\n\n```go\nidentity, err := agekd.X25519IdentityFromKey(key, []byte(\"hello\"))\n```\n\nTo generate an age identity from a password:\n\n```go\nidentity, err := agekd.X25519IdentityFromPassword(password, nil)\n```\n\nThe default Argon2id parameters are:\n\n```go\nDefaultArgon2idTime    uint32 = 4\nDefaultArgon2idMemory  uint32 = 6291456 // KiB = 6 GiB\nDefaultArgon2idThreads uint8  = 8\n```\n\nwhich takes ~3s per hash on an AMD 5800X3D 8-Core CPU. You can select your own parameters with:\n\n```go\nidentity, err := agekd.X25519IdentityFromPasswordWithParameters(password, nil, time, memory, threads)\n```\n\nFor guidance on Argon2id parameter selection, refer to [rfc9106](https://www.rfc-editor.org/rfc/rfc9106.html#name-parameter-choice).\n\n## Licensing\n\nUnless otherwise specified within a file, this code is distributed under the [MIT license](/LICENSE).\n\nThe [`bech32`](/bech32/) package was copied verbatim from https://github.com/FiloSottile/age/tree/v1.2.0/internal/bech32\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fawnumar%2Fagekd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fawnumar%2Fagekd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fawnumar%2Fagekd/lists"}