{"id":46993775,"url":"https://github.com/multiparty/jigg","last_synced_at":"2026-03-11T14:39:10.403Z","repository":{"id":50785747,"uuid":"212408095","full_name":"multiparty/jigg","owner":"multiparty","description":"JavaScript implementation of garbled gates and 2PC boolean circuit protocols","archived":false,"fork":false,"pushed_at":"2022-08-08T21:03:35.000Z","size":26883,"stargazers_count":22,"open_issues_count":3,"forks_count":7,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-09-26T19:51:59.300Z","etag":null,"topics":["cybersecurity","garbled-circuits","javascript","javascript-library","mpc","multi-party","multi-party-computation","multiparty","multiparty-computation","privacy-enhancing-technologies","web-security"],"latest_commit_sha":null,"homepage":"https://multiparty.org/jigg","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/multiparty.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}},"created_at":"2019-10-02T18:04:01.000Z","updated_at":"2024-05-18T17:44:12.000Z","dependencies_parsed_at":"2022-08-24T07:11:09.872Z","dependency_job_id":null,"html_url":"https://github.com/multiparty/jigg","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/multiparty/jigg","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multiparty%2Fjigg","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multiparty%2Fjigg/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multiparty%2Fjigg/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multiparty%2Fjigg/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/multiparty","download_url":"https://codeload.github.com/multiparty/jigg/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/multiparty%2Fjigg/sbom","scorecard":{"id":667951,"data":{"date":"2025-08-18","repo":{"name":"github.com/multiparty/jigg","commit":"afb4af1cef0a90cc9272d0daf78bc665100b188f"},"scorecard":{"version":"v5.2.1-41-g40576783","commit":"40576783fda6698350fcbbeaea760ff827433034"},"score":3.6,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#packaging"}},{"name":"Code-Review","score":1,"reason":"Found 1/9 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#binary-artifacts"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#security-policy"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#pinned-dependencies"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#fuzzing"}}]},"last_synced_at":"2025-08-21T18:48:03.356Z","repository_id":50785747,"created_at":"2025-08-21T18:48:03.356Z","updated_at":"2025-08-21T18:48:03.356Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30384146,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-11T14:10:17.325Z","status":"ssl_error","status_checked_at":"2026-03-11T14:09:37.934Z","response_time":84,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["cybersecurity","garbled-circuits","javascript","javascript-library","mpc","multi-party","multi-party-computation","multiparty","multiparty-computation","privacy-enhancing-technologies","web-security"],"created_at":"2026-03-11T14:39:09.863Z","updated_at":"2026-03-11T14:39:10.394Z","avatar_url":"https://github.com/multiparty.png","language":"JavaScript","readme":"# JIGG\n\nJavaScript implementation of garbled gates and 2PC boolean circuit protocols.\n\n## Requirements and Installation\n\nThis library is implemented entirely in JavaScript. Running the server requires [Node.js](https://nodejs.org/en/), [npm](https://www.npmjs.com/) (both installed via `yum install nodejs npm` or `brew install npm` on macOS), [Socket.IO](https://socket.io/), and [libsodium](https://www.npmjs.com/package/libsodium).\n\nRun `npm` to install all JIGG dependencies:\n```shell\nnpm install\n```\n\n## Project Layout\n\n    ├─ circuits/        Circuit files\n    │  ├─ macros/       Macro files to assemble circuits using [CASM](https://github.com/wyatt-howe/macro-circuit-assembler)\n    │  └─ bristol/      Bristol format files\n    ├─ demo/            Demo for client-server deployment scenario\n    ├─ src/             Library modules implementing protocol steps for participants\n    │  ├─ comm/         Communications modules (such as for OT)\n    │  ├─ modules/         Data structure modules (such as circuits)\n    │  └─ utils/        Other utility modules (such as cryptographic primitives)\n    ├─ test/            End-to-end tests\n    └─ tutorial/        Interactive tutorial on using JIGG\n\n## Running The tutorial\n\nYou can run the tutorial interactively on your local machine, after cloning JIGG, by using\n```shell\ncd path/to/JIGG\nnpm run tutorial\n```\n\n## Running Demo Circuit Applications\n\nStart the communications server from server.js with the command below:\n```shell\nnode demo/server.js \u003cport number\u003e\n```\n\n### As a Browser Party\n\nParties can go to `http://localhost:\u003cport\u003e/` in a web browser supporting JavaScript to begin communications.\n\n### As a Node.js Party\n\nConnect a new party in Node.js by running:\n```shell\nnode demo/party.js \u003cport\u003e \u003crole\u003e \u003cinput\u003e \u003cencoding\u003e \u003ccircuitName\u003e\n# \u003crole\u003e: Garbler or Evaluator\n# \u003cinput\u003e: string with no whitespaces\n# \u003cencoding\u003e: bits, number, or hex\n# \u003ccircuitName\u003e: must include file extension\n#                demo will run bristol circuit found at\n#                'circuits/bristol/\u003ccircuitName\u003e'\n```\n\nFor example to join an AES-128 computation as the garbler, run:\n```shell\nnode demo/party.js 3000 Evaluator 00000000000000000000000000000000 hex aes-128-reverse.txt\n```\n\n### Server + Garbler/Evaluator\n\nThe server may also run as a garbler or evaluator. You can acheive this by running the server with\nthe same arguments as a party:\n```shell\nnode demo/server.js \u003cport\u003e \u003crole\u003e \u003cinput\u003e \u003cencoding\u003e \u003ccircuitName\u003e\n```\n\n## Demo Circuits\nWe have a variety of circuits available under `circuits/bristol` mostly from this [page](https://homes.esat.kuleuven.be/~nsmart/MPC/).\n\n### Circuit Format\nJIGG can parse a circuit in the standardized '[Bristol](https://homes.esat.kuleuven.be/~nsmart/MPC/) [Format](https://homes.esat.kuleuven.be/~nsmart/MPC/old-circuits.html)' which is supported by several compiled MPC libraries such as [SCALE-MAMBA](https://homes.esat.kuleuven.be/~nsmart/SCALE/).\n```ada\n4 8\n2 2 2\n1 3\n2 1 0 1 4 AND\n2 1 2 3 5 XOR\n1 1 5 6 INV\n2 1 4 6 7 AND\n```\n\n### Circuit Assembler\nTo create a new circuit, write a macro with existing circuits as its gates and run the [macro-circuit-assembler](https://github.com/wyatt-howe/macro-circuit-assembler/) with:\n\n```shell\nnpm run casm -- \u003cpath_to_macro\u003e \u003coutput_path\u003e\n```\n\nFor example, this macro assembles an AND circuit over 8 bits using\nexisting 4 bit AND circuits:\n\n```\nnpm run casm -- circuits/macros/and-8.casm circuits/and-8.txt\n```\n\n## Running Tests\n\nAll of the built-in test vectors can be verified in `npm test`. The tests will run a server automatically. These are end-to-end tests.\n\n## Capabilities\nJIGG is designed for semi-honest parties (in either node or in the browser). We support point-and-permute, free-XOR, free single-input gates, and encryption from a random oracle (fixed-key XChaCha20). The half-AND optimization is compatible but not yet supported. The default label size is 128 bits and relies on JavaScript's Uint8Array class. The [`simple-labels`](https://github.com/wyatt-howe/jigg/tree/simple-labels) branch demonstrates dynamically-sized labels (that are 53 bits in length or less) without using arrays. Some potential improvements are listed in the to-do section.\n\n## Contributing\nJIGG is fully functional as it is now, but there's still more to do (see the list below) before version 1.  Pull requests are welcome for any improvement.  The JIGG source is maintained with the help of [ESLint](https://eslint.org/) for style and the [included test suite](https://github.com/multiparty/jigg#legacy-end-to-end-tests) for stability.\n\n### To Do\n- Half-AND gate optimization\n- Standardize JSON/serialized/compressed formats for inter-party messages compatible with [SIGG](https://github.com/multiparty/sigg)\n\n## Information and Collaborators\nMore information about this project, including collaborators and publications, can be found at [multiparty.org](https://multiparty.org/).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmultiparty%2Fjigg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmultiparty%2Fjigg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmultiparty%2Fjigg/lists"}