{"id":22253681,"url":"https://github.com/nitrokey/opcard-rs","last_synced_at":"2025-09-03T18:39:28.763Z","repository":{"id":61363035,"uuid":"499103919","full_name":"Nitrokey/opcard-rs","owner":"Nitrokey","description":"OpenPGP card implementation","archived":false,"fork":false,"pushed_at":"2025-08-22T14:10:03.000Z","size":1137,"stargazers_count":56,"open_issues_count":30,"forks_count":1,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-08-28T22:57:21.186Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Nitrokey.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSES/CC0-1.0.txt","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-06-02T11:15:27.000Z","updated_at":"2025-08-22T14:10:05.000Z","dependencies_parsed_at":"2023-11-28T11:29:29.156Z","dependency_job_id":"0ed4dd78-999d-4862-a851-6bba1cd766e8","html_url":"https://github.com/Nitrokey/opcard-rs","commit_stats":{"total_commits":453,"total_committers":4,"mean_commits":113.25,"dds":0.09050772626931569,"last_synced_commit":"d2ed9c4e420e6a1fcf16168b3c9e26d83b096bad"},"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/Nitrokey/opcard-rs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nitrokey%2Fopcard-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nitrokey%2Fopcard-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nitrokey%2Fopcard-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nitrokey%2Fopcard-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Nitrokey","download_url":"https://codeload.github.com/Nitrokey/opcard-rs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nitrokey%2Fopcard-rs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273491602,"owners_count":25115377,"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-09-03T02:00:09.631Z","response_time":76,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","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":[],"created_at":"2024-12-03T07:19:24.372Z","updated_at":"2025-09-03T18:39:28.742Z","avatar_url":"https://github.com/Nitrokey.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!--\nCopyright (C) 2022 Nitrokey GmbH\nSPDX-License-Identifier: CC0-1.0\n--\u003e\n\n# opcard-rs\n\n`opcard` is a Rust implementation of the [OpenPGP smart card specification\nv3.4][spec] using the [Trussed][] framework for modern cryptographic firmware.\nIt is developed for the [Nitrokey 3][] but can be used with any device\nsupporting Trussed.\n\n[spec]: https://github.com/Nitrokey/openpgp-card/raw/master/OpenPGP%20Card%20Specification%203.4.pdf\n[Trussed]: https://github.com/trussed-dev/trussed\n[Nitrokey 3]: https://github.com/nitrokey/nitrokey-3-firmware\n\n## Usage\n\nSee the [Nitrokey 3 documentation][docs].\n\n[docs]: https://docs.nitrokey.com/nitrokey3/\n\n## Features\n\n`opcard` currently supports the basic OpenPGP Card functionality (key generation,\nkey import, signing, decrypting, card administration).\n\nHere are the currently supported algorithms:\n\n- RSA-2048\n- RSA-3072\n- RSA-4096\n- EcDSA and ECDH for P256\n- EdDSA and ECDH for Curve25519\n\n## Development\n\nOpcard uses [virtualsmartcard](https://frankmorgner.github.io/vsmartcard/) for testing.\n`make test` will run `opcard` on the host through virtualsmartcard and test it.\n\n`make dangerous-real-card-test` will instead run the tests against a real card.\nThe vendor id and serial numbers can be configured with variables:\n\n\n- `OPCARD_DANGEROUS_TEST_CARD_USB_VENDOR` configures the USB vendor ID of the device\n- `OPCARD_DANGEROUS_TEST_CARD_USB_PRODUCT` configures the USB product ID of the device\n\nThose can be obtained by `lsusb`. In the line `Bus 003 Device 010: ID 20a0:42b2 Clay Logic Nitrokey 3`, `20a0` is `OPCARD_DANGEROUS_TEST_CARD_USB_VENDOR` and `42b2` is `OPCARD_DANGEROUS_TEST_CARD_USB_PRODUCT`.\n\n- `OPCARD_DANGEROUS_TEST_CARD_PGP_VENDOR` configures the PGP vendor ID of the device\n- `OPCARD_DANGEROUS_TEST_CARD_PGP_SERIAL` configures the PGP serial number of the device. \n\nThose can be obtained by `opgpcard status`. In the line `OpenPGP card 000F:566F86B0 (card version 3.4)`, `000F` is `OPCARD_DANGEROUS_TEST_CARD_PGP_VENDOR` and `566F86B0` is `OPCARD_DANGEROUS_TEST_CARD_PGP_SERIAL`.\n\nBe aware that due to conflicts between `gpg-agent` and `pcscd` (the smartcard daemon), this test suite will start then  stop `pcscd`\n\n```\nmake dangerous-real-card-test \\\n  OPCARD_DANGEROUS_TEST_CARD_USB_VENDOR=\"20A0\" \\\n  OPCARD_DANGEROUS_TEST_CARD_USB_PRODUCT=\"42B2\" \\\n  OPCARD_DANGEROUS_TEST_CARD_PGP_VENDOR=\"0000\" \\\n  OPCARD_DANGEROUS_TEST_CARD_PGP_SERIAL=\"A020DF77\" \\\n  OPCARD_DANGEROUS_TEST_CARD_NAME=\"test card\"\n```\n\nTo ensure backward compatibility, the test suite contains tests that the persistent state of the application can still be loaded from previous versions.\nWhenever the version is bumped in `Cargo.toml`, new \"reference\" files must be generated for the new version.\nThis can be done with `TEST_STATE_CAN_CREATE=true cargo test`.\n\n## Bug reports\n\nIf you encounter a bug or have a feature request, please inform us on [our forum](https://support.nitrokey.com/).\nPlease include the output of `gpg --card-status` so for context.\n\n## License\n\nThis project is licensed under the [GNU Lesser General Public License (LGPL)\nversion 3][LGPL-3.0].  Configuration files and examples are licensed under the\n[CC0 1.0 license][CC0-1.0].  For more information, see the license header in\neach file.  You can find a copy of the license texts in the\n[`LICENSES`](./LICENSES) directory.\n\n[LGPL-3.0]: https://opensource.org/licenses/LGPL-3.0\n[CC0-1.0]: https://creativecommons.org/publicdomain/zero/1.0/\n\nThis project complies with [version 3.0 of the REUSE specification][reuse].\n\n[reuse]: https://reuse.software/practices/3.0/\n\n## Funding\n\n[\u003cimg src=\"https://nlnet.nl/logo/banner.svg\" width=\"200\" alt=\"Logo NLnet: abstract logo of four people seen from above\" hspace=\"20\"\u003e](https://nlnet.nl/)\n[\u003cimg src=\"https://nlnet.nl/image/logos/NGI0PET_tag.svg\" width=\"200\" alt=\"Logo NGI Zero: letterlogo shaped like a tag\" hspace=\"20\"\u003e](https://nlnet.nl/NGI0/)\n\nThis project was funded through the [NGI0 PET](https://nlnet.nl/PET) Fund, a fund established by [NLnet](https://nlnet.nl/) with financial support from the European Commission's [Next Generation Internet programme](https://ngi.eu/), under the aegis of DG Communications Networks, Content and Technology under grant agreement No 825310.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnitrokey%2Fopcard-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnitrokey%2Fopcard-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnitrokey%2Fopcard-rs/lists"}