Git Product home page Git Product logo

ursa's Introduction

HYPERLEDGER URSA

Ursa CI Build status CII Best Practices

Introduction

Ursa was created because people in the Hyperledger community realized that it would save time and effort and improve security if we all collaborated on our cryptographic code. Since cryptographic APIs are relatively straightforward to define, it would be possible for many different projects to utilize the same code without too much difficulty.

First and foremost, we hope in the long run that Ursa provides open-source blockchain developers with reliable, secure, easy-to-use, and pluggable cryptographic implementations.

Features

The major artifacts of Ursa are:

  • C-callable library interface
  • Rust crate

Ursa is divided into two sub libraries: libursa and libzmix.

Libursa

Designed for cryptographic primitives like simple digital signatures, encryption schemes, and key exchange.

Supported Signatures

  • ECDSA
    • Secp256k1
  • EdDSA
    • Ed25519 (Curve25519 in Twisted Edwards Form)
  • Boneh Lynn Shacham (BLS) Signature
    • Any Pairing friendly curves
  • Camenisch Lysyanskaya
    • RSA based
  • Shamir Secret Sharing

Supported Key Agreement

  • ECDH
    • Secp256k1
    • X25519 (Curve25519 in Montgomery Form)

Symmetric Encryption

  • AES-CBC
  • AES-GCM
  • XCHACHA20-POLY1305

Libzmix

A generic way to create zero-knowledge proofs, proving statements about multiple cryptographic building blocks, containing signatures, commitments, and verifiable encryption. Libzmix uses many of the building blocks found in Libursa.

Supported Zero Knowledge Proof capabilities

  • Signature Proofs of Knowledge
  • Bulletproofs
  • Range proofs
  • Set Membership

Supported Signatures

  • Boneh Boyen Shacham (BBS+)
    • Any Pairing friendly curves
  • Pointcheval Saunders
    • Any pairing friendly curves
  • Groth
    • Any Pairing friendly curves

Dependencies

Ursa uses the following external dependencies:

These dependencies are used when building in the default secure mode. These libraries are widely known. There is a goal to be able to compile Ursa from rust only code for portability reasons like generating web assemblies without the worry of compatibility issues from C code. For this reason, Ursa can be compiled with portable mode which replaces any external libraries with rust compatible code. Ursa developers take care when choosing suitable replacements that are cryptographically safe to use but may not have been audited and vetted in a similar manner to these external libraries. Ursa consumers should note this when using portable mode for their applications.

Building from Source

Libursa and Libzmix rely on libsodium for the default secure mode. Please see the following document for specific platform installations here.

Libursa

Libursa uses the rustc compiler with cargo. Go into the libursa folder where the Cargo.toml lives. Run the following commands to get the default secure mode:

cargo build --release

Run the following commands to build in portable mode:

cargo build --release --no-default-features --features=portable

If you wish to take advantage of assembly level features, you can build Ursa using the nightly compiler of rust.

cargo build --release --no-default-features --features=asm

The resulting artifact(s) can be found in the target/release folder. They include:

libursa.so (Linux)
libursa.dylib (Mac OS X)
libursa.a (Linux, Mac OS X)
libursa.dll (Windows)
libursa.lib (Windows)

Packaging

Libursa can be packaged for debian builds using cargo-deb. To create a debian package, run the following command with cargo-deb installed

cargo deb -p ursa

Libursa Documentation

Libursa API documentation is now available as rust doc in code. See:

Libzmix

Libzmix uses the rustc compiler with cargo. Go into the libzmix folder where the Cargo.toml lives. Run the following commands to get the default secure mode:

cargo build --release

Run the following commands to build in portable mode:

cargo build --release --no-default-features --features=portable

If you wish to take advantage of assembly level features, you can build ZMix using the nightly compiler of rust.

cargo build --release --no-default-features --features=asm

The resulting artifact(s) can be found in the target/release folder. They include:

libzmix.so (Linux)
libzmix.dylib (Mac OS X)
libzmix.a (Linux, Mac OS X)
libzmix.dll (Windows)
libzmix.lib (Windows)

Contributing

All bugs, stories, and backlog for this project are managed through Hyperledger's Jira in project IS (note that regular Ursa tickets are in the URSA project).

Also, join us on Hyperledger Rocket.Chat at #ursa to discuss.

The ursa group also meets biweekly on Wednesday's at 7 AM PST at https://zoom.us/my/hyperledger.community. The meeting notes are available here.

Major modifications to ursa are submitted as RFCs to the Ursa RFC repo.

For more details on contributing see CONTRIBUTING

ursa's People

Contributors

mikelodder7 avatar artemkaaas avatar lovesh avatar jovfer avatar aknuds1 avatar axelnennker avatar brentzundel avatar dcmiddle avatar andrewwhitehead avatar mac-arrap avatar ryjones avatar tarcieri avatar dhuseby avatar jwagantall avatar hartm avatar haoxuan40404 avatar e-ivkov avatar alexmat2on avatar mrkaurelius avatar lehors avatar dhh1128 avatar kdenhartog avatar kdenhartog-mattr avatar techwritingwhiz avatar vmarkushin avatar aphoh avatar davidkhala avatar denzenin avatar g2flyer avatar tosirisuk avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.