{"id":13760339,"url":"https://github.com/NuID/zk","last_synced_at":"2025-05-10T10:32:24.052Z","repository":{"id":42210167,"uuid":"158463927","full_name":"NuID/zk","owner":"NuID","description":"Cross-platform zero knowledge proofs","archived":false,"fork":false,"pushed_at":"2023-03-04T03:35:03.000Z","size":293,"stargazers_count":45,"open_issues_count":6,"forks_count":5,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-04-19T16:16:12.168Z","etag":null,"topics":["clj","cljc","cljs","clojure","clojurescript","key-management","zero-knowledge"],"latest_commit_sha":null,"homepage":"https://nuid.io","language":"Clojure","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/NuID.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-11-20T23:25:16.000Z","updated_at":"2024-01-26T10:06:51.000Z","dependencies_parsed_at":"2024-01-15T03:45:17.558Z","dependency_job_id":"a0984f81-d566-403d-9d4e-3a34de6c713a","html_url":"https://github.com/NuID/zk","commit_stats":{"total_commits":86,"total_committers":4,"mean_commits":21.5,"dds":0.05813953488372092,"last_synced_commit":"30d494bf239d3be8f4921c9d42d21f12d74c3399"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NuID%2Fzk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NuID%2Fzk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NuID%2Fzk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NuID%2Fzk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NuID","download_url":"https://codeload.github.com/NuID/zk/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224949770,"owners_count":17397231,"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":["clj","cljc","cljs","clojure","clojurescript","key-management","zero-knowledge"],"created_at":"2024-08-03T13:01:08.190Z","updated_at":"2024-11-16T17:30:58.832Z","avatar_url":"https://github.com/NuID.png","language":"Clojure","funding_links":[],"categories":["Clojure"],"sub_categories":[],"readme":"\u003cp align=\"right\"\u003e\u003ca href=\"https://nuid.io\"\u003e\u003cimg src=\"https://nuid.io/svg/logo.svg\" width=\"20%\"\u003e\u003c/a\u003e\u003c/p\u003e\n\n# nuid.zk\n\nCross-platform zero knowledge proofs.\n\nGit issues and other communications are warmly welcomed. [dev@nuid.io](mailto:dev@nuid.io)\n\n## Requirements\n\n[`jvm`](https://www.java.com/en/download/), [`node + npm`](https://nodejs.org/en/download/), [`clj`](https://clojure.org/guides/getting_started), [`shadow-cljs`](https://shadow-cljs.github.io/docs/UsersGuide.html#_installation)\n\n## Clojure and ClojureScript\n\n### tools.deps:\n\n`{nuid/zk {:git/url \"https://github.com/nuid/zk\" :sha \"...\"}}`\n\n### usage:\n\n```\n$ clj # or shadow-cljs node-repl\n=\u003e (require\n     #?@(:clj\n         ['[clojure.spec-alpha2.gen :as gen]\n          '[clojure.spec-alpha2 :as s]]\n         :cljs\n         ['[clojure.spec.gen.alpha :as gen]\n          '[clojure.test.check.generators]\n          '[clojure.spec.alpha :as s]])\n     '[nuid.cryptography :as crypt]\n     '[nuid.zk :as zk])\n\n=\u003e (def parameters (gen/generate (s/gen ::zk/parameters)))\n=\u003e (def secret     \"high entropy ✅\")\n=\u003e (def pub        (zk/pub (assoc parameters :secret secret)))\n=\u003e (def nonce      (gen/generate (s/gen ::crypt/nonce)))\n=\u003e (def parameters (merge parameters {:pub pub :nonce nonce}))\n\n=\u003e (def good-proof (zk/proof (merge parameters {:secret secret})))\n=\u003e (def bad-proof  (zk/proof (merge parameters {:secret \"garbage 🚮\"})))\n\n=\u003e (zk/verified?   (merge parameters good-proof))\n=\u003e (zk/verified?   (merge parameters bad-proof))\n```\n\n## JavaScript\n\n### node:\n\n```bash\n$ npm install -s @nuid/zk\n$ node\n\u003e var Zk = require('@nuid/zk');\n\n// client context, sign up\n\u003e var secret = \"high entropy ✅\"\n\u003e var verifiable = Zk.verifiableFromSecret(secret);\n\u003e var json = JSON.stringify(verifiable);\n\n// server context, sign up\n\u003e var verifiable = JSON.parse(json);\n\u003e Zk.isVerified(verifiable)\n\u003e var credential = Zk.credentialFromVerifiable(verifiable); // persist credential (db, ledger, ...)\n\n// server context, sign in\n\u003e var challenge = Zk.defaultChallengeFromCredential(credential); // retrieve credential (db, ledger, ...)\n\u003e var json = JSON.stringify(challenge);\n\n// client context, sign in\n\u003e var challenge = JSON.parse(json);\n\u003e var proof = Zk.proofFromSecretAndChallenge(secret, challenge);\n\u003e var json = JSON.stringify(proof);\n\n// server context, sign in\n\u003e var proof = JSON.parse(json);\n\u003e var verifiable = Zk.verifiableFromProofAndChallenge(proof, challenge)\n\u003e Zk.isVerified(verifiable) ? /* verified */ : /* unverified */ ;\n```\n\n### browser:\n\nThe `npm` package is browser-compatible in Webpack-like workflows.\n\n## Java\n\nTo call `nuid.zk` from Java or other JVM languages, use one of the recommended interop strategies ([var/IFn](https://clojure.org/reference/java_interop#_calling_clojure_from_java) or [uberjar/aot](https://push-language.hampshire.edu/t/calling-clojure-code-from-java/865)). Doing so may require modifications or additions to the API for convenience.\n\n## CLR\n\n[Coming soon](https://github.com/bcgit/bc-csharp)\n\n## Notes\n\nThe purpose of `nuid.zk` and sibling `nuid` libraries (e.g. [`nuid.bn`](https://github.com/nuid/bn)) is to abstract over platform-specific differences and provide a common interface to fundamental dependencies. This allows us to express dependent logic (e.g. [`nuid.zk`](https://github.com/nuid/zk)) once in pure Clojure(Script), and use it from each of the host platforms (Java, JavaScript, CLR). This is particularly useful for generating and verifying proofs across service boundaries.\n\n## Licensing\n\nApache v2.0 or MIT\n\n## ⚠️  Disclaimer\n\nThis library is [property tested](https://github.com/clojure/test.check#testcheck) to help verify implementation, but has not yet been audited by an independent third party.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNuID%2Fzk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FNuID%2Fzk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNuID%2Fzk/lists"}