{"id":19909094,"url":"https://github.com/dyne/fxc","last_synced_at":"2025-07-26T10:38:38.476Z","repository":{"id":141086219,"uuid":"85248502","full_name":"dyne/FXC","owner":"dyne","description":"FXC Simple Secret Sharing - clojure library ","archived":false,"fork":false,"pushed_at":"2019-06-24T13:29:33.000Z","size":1802,"stargazers_count":13,"open_issues_count":1,"forks_count":4,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-05-03T02:38:48.360Z","etag":null,"topics":["clojure","crypto","secret","secret-sharing","shamir"],"latest_commit_sha":null,"homepage":"https://secrets.dyne.org","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dyne.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null},"funding":{"github":["dyne"],"patreon":"dyneorg","open_collective":"dyneorg"}},"created_at":"2017-03-16T22:50:35.000Z","updated_at":"2023-08-27T17:29:19.000Z","dependencies_parsed_at":"2023-03-24T11:21:11.136Z","dependency_job_id":null,"html_url":"https://github.com/dyne/FXC","commit_stats":{"total_commits":80,"total_committers":2,"mean_commits":40.0,"dds":0.0625,"last_synced_commit":"b8483f1c833fb0fd779882b821699246e2289e66"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/dyne/FXC","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dyne%2FFXC","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dyne%2FFXC/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dyne%2FFXC/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dyne%2FFXC/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dyne","download_url":"https://codeload.github.com/dyne/FXC/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dyne%2FFXC/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267150480,"owners_count":24043473,"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-07-26T02:00:08.937Z","response_time":62,"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":["clojure","crypto","secret","secret-sharing","shamir"],"created_at":"2024-11-12T21:14:21.489Z","updated_at":"2025-07-26T10:38:38.457Z","avatar_url":"https://github.com/dyne.png","language":"Clojure","funding_links":["https://github.com/sponsors/dyne","https://patreon.com/dyneorg","https://opencollective.com/dyneorg"],"categories":[],"sub_categories":[],"readme":"# FXC Simple Secret Sharing\n\n\u003ca href=\"https://www.dyne.org\"\u003e\u003cimg\nsrc=\"https://secrets.dyne.org/static/img/swbydyne.png\"\nalt=\"software by Dyne.org\"\ntitle=\"software by Dyne.org\" class=\"pull-right\"\u003e\u003c/a\u003e\n\n\n[![Build Status](https://travis-ci.org/dyne/FXC.svg?branch=master)](https://travis-ci.org/dyne/FXC)\n\n[![Code Climate](https://codeclimate.com/github/dyne/FXC.png)](https://codeclimate.com/github/dyne/FXC)\n\n[![Clojars Project](https://clojars.org/org.clojars.dyne/fxc/latest-version.svg)](https://clojars.org/org.clojars.dyne/fxc)\n\nThe \"FXC\" cryptographic protocol is used to split a secret string in multiple parts and to recover it using some of these parts (quorum). An functional application demonstrating its functionality is available at \u003ca href=\"https://secrets.dyne.org\"\u003esecrets.dyne.org\n\n\u003cimg src=\"https://secrets.dyne.org/static/img/secret_ladies.jpg\"\n\talt=\"Simple Secret Sharing is fun\"\n\ttitle=\"Simple Secret Sharing is fun\"\u003e\n\u003c/a\u003e\n\nThe FXC protocol and its use case (mostly related to social digital currency) are explained in this document [Implementation of digital social currency infrastructure (D5.5)](http://dcentproject.eu/wp-content/uploads/2015/10/D5.5-Implementation-of-digital-social-currency-infrastructure-.pdf) produced as part of the research conducted in the [D-CENT project](http://dcentproject.eu).\n\n# Usage\n\n```clojure\n(require 'fxc.core)\n(def secret (fxc.core/generate :url 32))\n(def shares (fxc.core/encode fxc.core/settings secret))\n(fxc.core/decode fxc.core/settings shares)\n```\n\nDefault configuration settings:\n```clojure\n{:salt \"La gatta sul tetto che scotta\",\n :description \"FXC v1 (Simple Secret Sharing, Freecoin component)\",\n :protocol \"FXC1\", :alphabet \"ABCDEFGHJKLMNPQRSTUVWXYZ23456789\",\n :quorum 3,\n :prime prime4096,\n :type \"WEB\",\n :total 5,\n :max 1024,\n :length 6,\n :entropy 3.1}\n```\n\nPublic functions:\n\n- Encode\n```clojure\nfxc.core/encode\n([conf pass])\n  Takes a string and returns multiple strings that can be used to\n  retrieve the original according to settings.\n```\n- Decode\n```clojure\nfxc.core/decode\n([conf slices])\n  Takes a collection of strings and returns the original secret\n  according to the settings.\n```\n- Generate\n```clojure\nfxc.core/generate\n([type size])\n  Generates a random password of type and size. Available types\n  are :bytes :base64 :base32 :hex and :url\n```\n\n\n\n\n# Acknowledgments\n\n\u003cimg src=\"https://github.com/dyne/FXC/blob/master/doc/Haarlemsche_ABC.jpg\"\n\talt=\"Haarlem's Alphabet textile, from a Vlisco exhibition\"\n\ttitle=\"Haarlem's Alphabet textile, from a Vlisco exhibition\"\n\tstyle=\"float: right\"\u003e\n\nIndustry standard addressed: Information technology -- Security techniques -- Secret sharing\n- [ISO/IEC 19592-1:2016](https://www.iso.org/standard/65422.html) (Part 1: General)\n- [ISO/IEC FDIS 19592-2 (Under development)](https://www.iso.org/standard/65425.html) (Part 2: Fundamental mechanisms)\n\nThe [Secret Sharing](https://en.wikipedia.org/wiki/Secret_sharing) algorithm adopted is based on [Shamir's Secret Sharing](https://en.wikipedia.org/wiki/Shamir%27s_Secret_Sharing), references:\n- Shamir, Adi (1979), \"How to share a secret\", Communications of the ACM 22 (11): 612–613\n- Knuth, D. E. (1997), The Art of Computer Programming, II: Seminumerical Algorithms: 505\n\nThe implementation used is by Tim Tiemens with a 4096 cipher prime number. The Integer Compression algorithm used internally is the FastPFOR128 by Daniel Lemire, see: Lemire, D. and Boytsov, L. \"[Decoding billions of integers per second through vectorization](http://arxiv.org/abs/1209.2137)\" (2015).\n\n## License\n\nFXC is Copyright (C) 2015-2019 by the Dyne.org Foundation\n\nDesigned, written and maintained by Denis Roio \u003cjaromil@dyne.org\u003e\n\nThis project is licensed under the AGPL 3 License - see the [LICENSE](LICENSE) file for details\n\n#### Additional permission under GNU AGPL version 3 section 7.\n\n``` \nIf you modify FXC, or any covered work, by linking or combining it with any library (or a modified version of that library), containing parts covered by the terms of EPL v 1.0, the licensors of this Program grant you additional permission to convey the resulting work. Your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. Corresponding Source for a non-source form of such a combination shall include the source code for the parts of the libraries (dependencies) covered by the terms of EPL v 1.0 used as well as that of the covered work.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdyne%2Ffxc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdyne%2Ffxc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdyne%2Ffxc/lists"}