{"id":21658663,"url":"https://github.com/keycard-tech/status-keycard","last_synced_at":"2026-01-16T10:52:50.347Z","repository":{"id":25562893,"uuid":"104332506","full_name":"keycard-tech/status-keycard","owner":"keycard-tech","description":"Our Javacard Implementation for making secure transactions within Status and Ethereum","archived":false,"fork":false,"pushed_at":"2026-01-14T10:06:47.000Z","size":3471,"stargazers_count":248,"open_issues_count":10,"forks_count":71,"subscribers_count":31,"default_branch":"master","last_synced_at":"2026-01-14T14:18:25.638Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","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/keycard-tech.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-09-21T10:09:08.000Z","updated_at":"2026-01-13T11:18:48.000Z","dependencies_parsed_at":"2025-12-12T17:06:53.058Z","dependency_job_id":null,"html_url":"https://github.com/keycard-tech/status-keycard","commit_stats":null,"previous_names":["keycard-tech/status-keycard","status-im/status-keycard"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/keycard-tech/status-keycard","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keycard-tech%2Fstatus-keycard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keycard-tech%2Fstatus-keycard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keycard-tech%2Fstatus-keycard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keycard-tech%2Fstatus-keycard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/keycard-tech","download_url":"https://codeload.github.com/keycard-tech/status-keycard/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keycard-tech%2Fstatus-keycard/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478086,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T06:30:42.265Z","status":"ssl_error","status_checked_at":"2026-01-16T06:30:16.248Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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-11-25T09:29:38.042Z","updated_at":"2026-01-16T10:52:50.335Z","avatar_url":"https://github.com/keycard-tech.png","language":"Java","funding_links":[],"categories":["Java"],"sub_categories":[],"readme":"# What is Keycard?\n\nKeycard is an implementation of a BIP-32 HD wallet running on Javacard 3.0.4+ (see implementation notes)\n\nIt supports among others\n- key generation, derivation and signing\n- exporting keys defined in the context of EIP-1581 https://eips.ethereum.org/EIPS/eip-1581\n- setting up a NFC NDEF tag\n\nCommunication with the Keycard happens through a simple APDU interface, together with a Secure Channel guaranteeing confidentiality, authentication and integrity of all commands. It supports both NFC and ISO7816 physical interfaces, meaning that it is compatible with any Android phone equipped with NFC, and all USB Smartcard readers.\n\nThe most obvious case for integration of Keycard is crypto wallets (ETH, BTC, etc), however it can be used in other systems where a BIP-32 key tree is used and/or you perform authentication/identification.\n\n# Where to start?\n\nA good place to start is our [documentation site](https://keycard.tech/docs/)\n\nKeycard is a public good — contributions are welcome and highly encouraged!\n\nYou can also join the discussion about this project on our [discord channel](https://discord.gg/uJAXk7jFhZ)\n\nKeycard is at the center of several projects, check the [ecosystem of projects](https://github.com/keycard-tech/keycard-ecosystem-projects/) or [good first issues](https://github.com/orgs/keycard-tech/projects/1/views/2?filterQuery=good+first+issue)\n\nShould you wish to work on an issue, please claim it first by commenting on the GitHub issue that you want to work on it. This is to prevent duplicated efforts from contributors on the same issue. \n\nIf you just want to use the Keycard as your hardware wallet there are currently three apps supporting it\n\n1. Status [[Android](https://play.google.com/store/apps/details?id=im.status.ethereum)][[iOS](https://apps.apple.com/us/app/status-private-communication/id1178893006)]\n2. WallETH [[Android](https://play.google.com/store/apps/details?id=org.walleth)]\n3. Enno Walet https://ennowallet.com/\n\n# How to build the project?\n\n**YOU NEED OPENJDK11 TO BUILD THIS PROJECT**\n\nmake sure your `JAVA_HOME` environment variable points to a working OpenJDK 11 installation. This is a prerequisite for all of the following steps.\n\n## Get the source\n\nClone this repository with `git clone --recurse-submodules https://github.com/keycard-tech/status-keycard`\n\n## Compilation\n\nRun `./gradlew convertJavacard`\n\n## Installation\n\nMake sure the card you are trying to use is using the T=1 protocol and SCP02 with either the GlobalPlatform default keys (404142434445464748494a4b4c4d4e4f) or the Keycard development cards key (c212e073ff8b4bbfaff4de8ab655221f), otherwise this installation method will not work and you will need to use an external tool like [GlobalPlatformPro](https://github.com/martinpaljak/GlobalPlatformPro).\n\n1. Disconnect all card reader terminals from the system, except the one with the card where you want to install the applet\n2. Run `./gradlew install`\n\n## Testing\n\nRun `./gradlew test`\n\nif you want to test using the simulator instead of a real card, create a file named `gradle.properties` with the content:\n\n```im.status.keycard.test.target=simulator```\n\nbefore running the tests.\n\n# What kind of smartcards can I use? \n\n* The applet requires JavaCard 3.0.5 or later.\n* The class byte of the APDU is not checked since there are no conflicting INS code.\n* The GlobalPlatform ISD keys are set to 404142434445464748494a4b4c4d4e4f or c212e073ff8b4bbfaff4de8ab655221f.\n\nThe algorithms the card must support are at least:\n* Cipher.ALG_AES_BLOCK_128_CBC_NOPAD\n* Cipher.ALG_AES_CBC_ISO9797_M2\n* KeyAgreement.ALG_EC_SVDP_DH_PLAIN\n* KeyAgreement.ALG_EC_SVDP_DH_PLAIN_XY\n* KeyPair.ALG_EC_FP (generation of 256-bit keys)\n* MessageDigest.ALG_SHA_256\n* MessageDigest.ALG_SHA_512\n* RandomData.ALG_SECURE_RANDOM\n* Signature.ALG_AES_MAC_128_NOPAD\n* Signature.ALG_ECDSA_SHA_256\n\nBest performance is achieved if the card supports:\n* Signature.ALG_HMAC_SHA_512\n\n# Other related repositories\n\nJava SDK for Android and Desktop https://github.com/keycard-tech/status-keycard-java\n\nSwift SDK for iOS13 and above https://github.com/keycard-tech/Keycard.swift\n\nKeycard CLI for Desktop https://github.com/keycard-tech/keycard-cli\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeycard-tech%2Fstatus-keycard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkeycard-tech%2Fstatus-keycard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkeycard-tech%2Fstatus-keycard/lists"}