Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nuid/zk
Cross-platform zero knowledge proofs
https://github.com/nuid/zk
clj cljc cljs clojure clojurescript key-management zero-knowledge
Last synced: about 1 month ago
JSON representation
Cross-platform zero knowledge proofs
- Host: GitHub
- URL: https://github.com/nuid/zk
- Owner: NuID
- License: apache-2.0
- Created: 2018-11-20T23:25:16.000Z (almost 6 years ago)
- Default Branch: main
- Last Pushed: 2023-03-04T03:35:03.000Z (over 1 year ago)
- Last Synced: 2024-04-19T16:16:12.168Z (7 months ago)
- Topics: clj, cljc, cljs, clojure, clojurescript, key-management, zero-knowledge
- Language: Clojure
- Homepage: https://nuid.io
- Size: 286 KB
- Stars: 45
- Watchers: 5
- Forks: 5
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE.md
Awesome Lists containing this project
README
# nuid.zk
Cross-platform zero knowledge proofs.
Git issues and other communications are warmly welcomed. [[email protected]](mailto:[email protected])
## Requirements
[`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)
## Clojure and ClojureScript
### tools.deps:
`{nuid/zk {:git/url "https://github.com/nuid/zk" :sha "..."}}`
### usage:
```
$ clj # or shadow-cljs node-repl
=> (require
#?@(:clj
['[clojure.spec-alpha2.gen :as gen]
'[clojure.spec-alpha2 :as s]]
:cljs
['[clojure.spec.gen.alpha :as gen]
'[clojure.test.check.generators]
'[clojure.spec.alpha :as s]])
'[nuid.cryptography :as crypt]
'[nuid.zk :as zk])=> (def parameters (gen/generate (s/gen ::zk/parameters)))
=> (def secret "high entropy ✅")
=> (def pub (zk/pub (assoc parameters :secret secret)))
=> (def nonce (gen/generate (s/gen ::crypt/nonce)))
=> (def parameters (merge parameters {:pub pub :nonce nonce}))=> (def good-proof (zk/proof (merge parameters {:secret secret})))
=> (def bad-proof (zk/proof (merge parameters {:secret "garbage 🚮"})))=> (zk/verified? (merge parameters good-proof))
=> (zk/verified? (merge parameters bad-proof))
```## JavaScript
### node:
```bash
$ npm install -s @nuid/zk
$ node
> var Zk = require('@nuid/zk');// client context, sign up
> var secret = "high entropy ✅"
> var verifiable = Zk.verifiableFromSecret(secret);
> var json = JSON.stringify(verifiable);// server context, sign up
> var verifiable = JSON.parse(json);
> Zk.isVerified(verifiable)
> var credential = Zk.credentialFromVerifiable(verifiable); // persist credential (db, ledger, ...)// server context, sign in
> var challenge = Zk.defaultChallengeFromCredential(credential); // retrieve credential (db, ledger, ...)
> var json = JSON.stringify(challenge);// client context, sign in
> var challenge = JSON.parse(json);
> var proof = Zk.proofFromSecretAndChallenge(secret, challenge);
> var json = JSON.stringify(proof);// server context, sign in
> var proof = JSON.parse(json);
> var verifiable = Zk.verifiableFromProofAndChallenge(proof, challenge)
> Zk.isVerified(verifiable) ? /* verified */ : /* unverified */ ;
```### browser:
The `npm` package is browser-compatible in Webpack-like workflows.
## Java
To 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.
## CLR
[Coming soon](https://github.com/bcgit/bc-csharp)
## Notes
The 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.
## Licensing
Apache v2.0 or MIT
## ⚠️ Disclaimer
This 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.