{"id":17145977,"url":"https://github.com/foxcpp/go-assuan","last_synced_at":"2025-04-13T11:22:03.155Z","repository":{"id":98732958,"uuid":"129777775","full_name":"foxcpp/go-assuan","owner":"foxcpp","description":"Pure Go implementation of Assuan IPC protocol (used in GnuPG suite)","archived":false,"fork":false,"pushed_at":"2020-09-19T07:25:18.000Z","size":72,"stargazers_count":17,"open_issues_count":2,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-27T02:38:31.416Z","etag":null,"topics":["assuan-ipc-protocol","gnupg"],"latest_commit_sha":null,"homepage":null,"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/foxcpp.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}},"created_at":"2018-04-16T17:02:30.000Z","updated_at":"2025-01-19T01:20:02.000Z","dependencies_parsed_at":"2023-03-13T15:55:43.857Z","dependency_job_id":null,"html_url":"https://github.com/foxcpp/go-assuan","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foxcpp%2Fgo-assuan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foxcpp%2Fgo-assuan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foxcpp%2Fgo-assuan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foxcpp%2Fgo-assuan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/foxcpp","download_url":"https://codeload.github.com/foxcpp/go-assuan/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248703745,"owners_count":21148225,"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":["assuan-ipc-protocol","gnupg"],"created_at":"2024-10-14T21:07:24.901Z","updated_at":"2025-04-13T11:22:03.122Z","avatar_url":"https://github.com/foxcpp.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"go-assuan\n===========\n\n[![Travis CI](https://img.shields.io/travis/com/foxcpp/go-assuan.svg?style=flat-square\u0026logo=Linux)](https://travis-ci.com/foxcpp/go-assuan)\n[![CodeCov](https://img.shields.io/codecov/c/github/foxcpp/go-assuan.svg?style=flat-square)](https://codecov.io/gh/foxcpp/go-assuan)\n[![Issues](https://img.shields.io/github/issues-raw/foxcpp/go-assuan.svg?style=flat-square)](https://github.com/foxcpp/go-assuan/issues)\n[![License](https://img.shields.io/github/license/foxcpp/go-assuan.svg?style=flat-square)](https://github.com/foxcpp/go-assuan/blob/master/LICENSE)\n[![Go Report Card](https://goreportcard.com/badge/github.com/foxcpp/go-assuan)](https://goreportcard.com/report/github.com/foxcpp/go-assuan)\n\nPure Go implementation of Assuan IPC protocol.\n\nAssuan protocol is used in GnuPG for communication between following\ncomponents: gpg, gpg-agent, pinentry, dirmngr. All of them are running as\nseparate processes and need a way to talk with each other. Assuan solves this\nproblem. \n\nUsing this library you can talk to gpg-agent or dirmngr directly, invoke\npinentry to get password prompt similar to GnuPG's one and even use Assuan as a\nprotocol for your own IPC needs.\n\nAssuan documentation: https://www.gnupg.org/documentation/manuals/assuan/index.html\n\nUsage\n-------\n\nMain unit of communication in Assuan is a command. Command consists of comamnd\nname (typically in uppercase) and one or more parameters (represented as one\nstring). Each command sent by client have response with status (\"OK\" or error)\nand optional arbitrary data. \n\nIn additional to simple commands there are transactions (data inquiries).\nThis is one way to send large data streams from client. Transaction is\ninitiated by command and then server will request data using keywords (actually\none keyword per stream). Client can cancel data transmission at any time. At\nthe end of transaction server will send result (OK or error). go-assuan supports\noptional data stream as a result but this is not in use by any of protocol\nimplementers.\n\nProtocol also specifies file descriptor passing but this is not supported by\nlibrary yet.\n\nClient side example:\n```go\n// Connect to dirmngr.\nconn, _ := net.Dial(\"unix\", \".gnupg/S.dirmngr\")\nses, _ := assuan.Init(conn)\ndefer ses.Close()\n\n// Search for my key on default keyserver.\ndata, _ := ses.SimpleCmd(\"KS_SEARCH\", \"foxcpp\")\nfmt.Println(string(data))\n// data []byte = \"info:1:1%0Apub:2499BEB8B47B0235009A5F0AEE8384B0561A25AF:...\"\n\n// More complex transaction: send key to keyserver.\nses.Transact(\"KS_PUT\", \"\", map[string][]byte{\n\t\"KEYBLOCK\":      []byte{},\n\t\"KEYBLOCK_INFO\": []byte{},\n})\n```\n\nServer code is much more complex, see it [here](server/server_test.go).\n\nVersioning \u0026 Git\n---------\n\ngo-assuan follows [Semantic Versioning 2.0.0](https://semver.org). `master` branch contains\nlatest **pre-release**. `dev` branch contains bleeding edge code for next release. For stable\ncode use Git tags.\n\nLicense\n---------\n\nMIT.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffoxcpp%2Fgo-assuan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffoxcpp%2Fgo-assuan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffoxcpp%2Fgo-assuan/lists"}