{"id":13733110,"url":"https://github.com/hyperledger-archives/ursa","last_synced_at":"2025-12-12T15:25:37.752Z","repository":{"id":33670721,"uuid":"158295966","full_name":"hyperledger-archives/ursa","owner":"hyperledger-archives","description":"Hyperledger Ursa (a shared cryptographic library) has moved to end-of-life status, with the components of Ursa still in use moved to their relevant Hyperledger projects (AnonCreds, Indy, Aries and Iroha).","archived":true,"fork":false,"pushed_at":"2024-01-24T20:45:39.000Z","size":5000,"stargazers_count":323,"open_issues_count":26,"forks_count":142,"subscribers_count":43,"default_branch":"main","last_synced_at":"2024-11-08T06:11:48.739Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://wiki.hyperledger.org/display/ursa","language":"Rust","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/hyperledger-archives.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-11-19T22:03:24.000Z","updated_at":"2024-10-11T05:37:03.000Z","dependencies_parsed_at":"2024-06-18T21:53:15.278Z","dependency_job_id":null,"html_url":"https://github.com/hyperledger-archives/ursa","commit_stats":null,"previous_names":["hyperledger/ursa"],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperledger-archives%2Fursa","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperledger-archives%2Fursa/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperledger-archives%2Fursa/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hyperledger-archives%2Fursa/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hyperledger-archives","download_url":"https://codeload.github.com/hyperledger-archives/ursa/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224717558,"owners_count":17357905,"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":[],"created_at":"2024-08-03T03:00:37.767Z","updated_at":"2025-12-12T15:25:37.720Z","avatar_url":"https://github.com/hyperledger-archives.png","language":"Rust","funding_links":[],"categories":["Libraries","Rust"],"sub_categories":["Libraries implemented according to earlier specifications"],"readme":"# HYPERLEDGER URSA\n\n[Hyperledger Ursa was moved to EOL at the TOC meeting on 27 APR 2023.](https://toc.hyperledger.org/meeting-minutes/2023/2023-04-27-TOC-meeting-record.html)\n\nThe components of Ursa that are still in active use are moved to their respective projects where they will continue to be maintained, including:\n\n- CL Signatures to AnonCreds\n- BBS+ Signatures to Aries\n- BLS Signatures to Indy\n\nThe published Ursa crates remain available for those projects already using them.\n\n- [Introduction](#introduction)\n- [Features](#features)\n    - [Libursa](#Libursa)\n    - [Libzmix](#libzmix)\n- [Dependencies](#dependencies)\n- [Building from source](#building-from-source)\n- [Contributing](#contributing)\n\n# Introduction\n\nUrsa was created because people in the Hyperledger community realized that it\nwould save time and effort and improve security if we all collaborated on our\ncryptographic code. Since cryptographic APIs are relatively straightforward to\ndefine, it would be possible for many different projects to utilize the same\ncode without too much difficulty.\n\nFirst and foremost, we hope in the long run that Ursa provides open-source\nblockchain developers with reliable, secure, easy-to-use, and pluggable\ncryptographic implementations.\n\n# Features\n\nThe major artifacts of Ursa are:\n\n- C-callable library interface\n- Rust crate\n\nUrsa is divided into two sub libraries: libursa and libzmix.\n\n## Libursa\n\nDesigned for cryptographic primitives like simple digital signatures, encryption\nschemes, and key exchange.\n\n### Supported Signatures\n\n- ECDSA\n  - Secp256k1\n- EdDSA\n  - Ed25519 (Curve25519 in Twisted Edwards Form)\n- Boneh Lynn Shacham (BLS) Signature\n  - Any Pairing friendly curves\n- Camenisch Lysyanskaya\n  - RSA based\n- Shamir Secret Sharing\n\n### Supported Key Agreement\n\n- ECDH\n  - Secp256k1\n  - X25519 (Curve25519 in Montgomery Form)\n\n### Symmetric Encryption\n\n- AES-CBC\n- AES-GCM\n- XCHACHA20-POLY1305\n\n## Libzmix\n\nA generic way to create zero-knowledge proofs, proving statements\nabout multiple cryptographic building blocks, containing signatures,\ncommitments, and verifiable encryption. Libzmix uses many of the building blocks\nfound in Libursa.\n\n### Supported Zero Knowledge Proof capabilities\n- Signature Proofs of Knowledge\n- Bulletproofs\n- Range proofs\n- Set Membership\n\n### Supported Signatures\n\n- Boneh Boyen Shacham (BBS+)\n  - Any Pairing friendly curves\n- Pointcheval Saunders\n  - Any pairing friendly curves\n- Groth\n  - Any Pairing friendly curves\n\n# Dependencies\n\nUrsa uses the following external dependencies:\n\n- [openssl 1.1.0j or greater](https://www.openssl.org/source/openssl-1.1.0j.tar.gz) (Written in C)\n- [libsecp256k1](https://github.com/bitcoin-core/secp256k1) (Written in C)\n\nThese dependencies are used when building in the default secure mode. These\nlibraries are widely known.  There is a goal to be able to compile Ursa from\nrust only code for portability reasons like generating web assemblies without\nthe worry of compatibility issues from C code. For this reason, Ursa can be\ncompiled with *portable* mode which replaces any external libraries with rust\ncompatible code. Ursa developers take care when choosing suitable replacements\nthat are cryptographically safe to use but may not have been audited and vetted\nin a similar manner to these external libraries. Ursa consumers should note this\nwhen using portable mode for their applications.\n\n# Building from Source\n\nPlease see the following document for platform-specific installations [here](docs/build-environment.md).\n\n## Libursa\n\nLibursa uses the rustc compiler with cargo. Go into the libursa\nfolder where the *Cargo.toml* lives.  Run the following commands to get the\ndefault secure mode:\n```bash\ncargo build --release\n```\n\nRun the following commands to build in portable mode:\n\n```bash\ncargo build --release --no-default-features --features=portable\n```\n\nIf you wish to take advantage of assembly level features, you can build\nUrsa using the nightly compiler of rust.\n\n```bash\ncargo build --release --no-default-features --features=asm\n```\n\nThe resulting artifact(s) can be found in the *target/release* folder. They\ninclude:\n\n    libursa.so (Linux)\n    libursa.dylib (Mac OS X)\n    libursa.a (Linux, Mac OS X)\n    libursa.dll (Windows)\n    libursa.lib (Windows)\n\n\n## Packaging\nLibursa can be packaged for debian builds using [cargo-deb](https://github.com/mmstick/cargo-deb).\nTo create a debian package, run the following command with cargo-deb installed\n\n`cargo deb -p ursa` \n\n### Libursa Documentation\n\nLibursa API documentation is now available as rust doc in code. See:\n* C API\n    - [BLS](./libursa/src/ffi/bls.rs)\n    - [CL](./libursa/src/ffi/cl/)\n* Rust API\n    - [BLS](./libursa/src/bls/mod.rs)\n    - [CL](./libursa/src/cl)\n\n## Libzmix\n\nLibzmix uses the rustc compiler with cargo. Go into the libzmix folder where the\n*Cargo.toml* lives.  Run the following commands to get the default secure mode:\n```bash\ncargo build --release\n```\n\nRun the following commands to build in portable mode:\n\n```bash\ncargo build --release --no-default-features --features=portable\n```\n\nIf you wish to take advantage of assembly level features, you can build\nZMix using the nightly compiler of rust.\n\n```bash\ncargo build --release --no-default-features --features=asm\n```\n\nThe resulting artifact(s) can be found in the *target/release* folder. They\ninclude:\n\n    libzmix.so (Linux)\n    libzmix.dylib (Mac OS X)\n    libzmix.a (Linux, Mac OS X)\n    libzmix.dll (Windows)\n    libzmix.lib (Windows)\n    \n# Contributing\n\nAll bugs, stories, and backlog for this project are managed through\nHyperledger's Jira in project IS (note that regular Ursa tickets are in the URSA\nproject).\n\nAlso, join us on [Hyperledger Rocket.Chat](https://chat.hyperledger.org) at #ursa to discuss.\n\nThe ursa group also meets biweekly on Wednesday's at 7 AM PST at\nhttps://zoom.us/my/hyperledger.community. The meeting notes are available\n[here](https://wiki.hyperledger.org/display/ursa/Meeting+Agendas+and+Notes).\n\nMajor modifications to ursa are submitted as RFCs to the [Ursa RFC\nrepo](https://github.com/hyperledger/ursa-rfcs). \n\nFor more details on contributing see [CONTRIBUTING](CONTRIBUTING.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhyperledger-archives%2Fursa","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhyperledger-archives%2Fursa","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhyperledger-archives%2Fursa/lists"}