Pure Rust Implementation of secp256k1.

Overview

SECP256K1 implementation in pure Rust

SECP256K1 implementation with no_std support. Currently we have implementation for:

  • Convert a private key to a public key.
  • Sign messages.
  • Signature verification.
  • Public key recovery from signed messages.
  • Shared secrets.

Feature flags

  • std: If disabled, works in no_std environment. Enabled by default.
  • hmac: Add certain features that requires the HMAC-DRBG. This includes signing. Enabled by default.
  • static-context: To speed up computation, the library uses a pre-computed table context for many ecmult operations. This feature flag puts the context directly as static variables. If disabled, the context must be created from heap manually. Increases binary size, enabled by default.
  • lazy-static-context: Instead of storing the pre-computed table context as static variables, store it as a variable that dynamically allocates the context in heap via lazy_static. It overwrites static-context. Impact bootstrap performance and only available in std, disabled by default.

Development workflow

Branch

This repository uses develop branch for development. Changes are periodically merged to master branch.

Pull request

All changes (except new releases) are handled through pull requests. Please open your PR against develop branch.

Versioning

libsecp256k1 follows Semantic Versioning. An unreleased crate in the repository will have the -dev suffix in the end, and we do rolling releases.

When you make a pull request against this repository, please also update the affected crates' versions, using the following rules. Note that the rules should be applied recursively -- if a change modifies any upper crate's dependency (even just the Cargo.toml file), then the upper crate will also need to apply those rules.

Additionally, if your change is notable, then you should also modify the corresponding CHANGELOG.md file, in the "Unreleased" section.

If the affected crate already has -dev suffix:

  • If your change is a patch, then you do not have to update any versions.
  • If your change introduces a new feature, please check if the local version already had its minor version bumped, if not, bump it.
  • If your change modifies the current interface, please check if the local version already had its major version bumped, if not, bump it.

If the affected crate does not yet have -dev suffix:

  • If your change is a patch, then bump the patch version, and add -dev suffix.
  • If your change introduces a new feature, then bump the minor version, and add -dev suffix.
  • If your change modifies the current interface, then bump the major version, and add -dev suffix.

If your pull request introduces a new crate, please set its version to 1.0.0-dev.

Comments
  • no-std support broken in 0.5.0

    no-std support broken in 0.5.0

    This issue has the same title as https://github.com/paritytech/libsecp256k1/issues/68, but the problem isn't the same.

    As of version 0.5.0/core-0.2.0, recently published on crates.io, compiling with default-feature = false leads to compilation errors in the core:

    error[E0412]: cannot find type `Vec` in this scope
      --> /home/pierre/.cargo/registry/src/github.com-1ecc6299db9ec823/libsecp256k1-core-0.2.0/src/ecmult.rs:19:19
       |
    19 |     let mut prej: Vec<Jacobian> = Vec::with_capacity(pre.len());
       |                   ^^^ not found in this scope
       |
    help: consider importing one of these items
       |
    1  | use alloc::vec::Vec;
       |
    1  | use crate::ecmult::vec::Vec;
       |
    
    error[E0433]: failed to resolve: use of undeclared type `Vec`
      --> /home/pierre/.cargo/registry/src/github.com-1ecc6299db9ec823/libsecp256k1-core-0.2.0/src/ecmult.rs:19:35
       |
    19 |     let mut prej: Vec<Jacobian> = Vec::with_capacity(pre.len());
       |                                   ^^^ not found in this scope
       |
    help: consider importing one of these items
       |
    1  | use alloc::vec::Vec;
       |
    1  | use crate::ecmult::vec::Vec;
       |
    
    error[E0412]: cannot find type `Vec` in this scope
      --> /home/pierre/.cargo/registry/src/github.com-1ecc6299db9ec823/libsecp256k1-core-0.2.0/src/ecmult.rs:23:19
       |
    23 |     let mut prea: Vec<Affine> = Vec::with_capacity(pre.len());
       |                   ^^^ not found in this scope
       |
    help: consider importing one of these items
       |
    1  | use alloc::vec::Vec;
       |
    1  | use crate::ecmult::vec::Vec;
       |
    
    error[E0433]: failed to resolve: use of undeclared type `Vec`
      --> /home/pierre/.cargo/registry/src/github.com-1ecc6299db9ec823/libsecp256k1-core-0.2.0/src/ecmult.rs:23:33
       |
    23 |     let mut prea: Vec<Affine> = Vec::with_capacity(pre.len());
       |                                 ^^^ not found in this scope
       |
    help: consider importing one of these items
       |
    1  | use alloc::vec::Vec;
       |
    1  | use crate::ecmult::vec::Vec;
       |
    
    error[E0412]: cannot find type `Vec` in this scope
      --> /home/pierre/.cargo/registry/src/github.com-1ecc6299db9ec823/libsecp256k1-core-0.2.0/src/ecmult.rs:27:17
       |
    27 |     let mut zr: Vec<Field> = Vec::with_capacity(pre.len());
       |                 ^^^ not found in this scope
       |
    help: consider importing one of these items
       |
    1  | use alloc::vec::Vec;
       |
    1  | use crate::ecmult::vec::Vec;
       |
    
    error[E0433]: failed to resolve: use of undeclared type `Vec`
      --> /home/pierre/.cargo/registry/src/github.com-1ecc6299db9ec823/libsecp256k1-core-0.2.0/src/ecmult.rs:27:30
       |
    27 |     let mut zr: Vec<Field> = Vec::with_capacity(pre.len());
       |                              ^^^ not found in this scope
       |
    help: consider importing one of these items
       |
    1  | use alloc::vec::Vec;
       |
    1  | use crate::ecmult::vec::Vec;
       |
    
    error[E0412]: cannot find type `Box` in this scope
      --> /home/pierre/.cargo/registry/src/github.com-1ecc6299db9ec823/libsecp256k1-core-0.2.0/src/ecmult.rs:62:27
       |
    62 |     pub fn new_boxed() -> Box<Self> {
       |                           ^^^ not found in this scope
       |
    help: consider importing one of these items
       |
    1  | use alloc::prelude::v1::Box;
       |
    1  | use crate::ecmult::vec::Box;
       |
    
    error[E0433]: failed to resolve: use of undeclared type `Box`
      --> /home/pierre/.cargo/registry/src/github.com-1ecc6299db9ec823/libsecp256k1-core-0.2.0/src/ecmult.rs:69:28
       |
    69 |             let mut this = Box::from_raw(ptr);
       |                            ^^^ not found in this scope
       |
    help: consider importing one of these items
       |
    1  | use alloc::prelude::v1::Box;
       |
    1  | use crate::ecmult::vec::Box;
       |
    
    error[E0412]: cannot find type `Vec` in this scope
      --> /home/pierre/.cargo/registry/src/github.com-1ecc6299db9ec823/libsecp256k1-core-0.2.0/src/ecmult.rs:88:43
       |
    88 | pub fn set_all_gej_var(a: &[Jacobian]) -> Vec<Affine> {
       |                                           ^^^ not found in this scope
       |
    help: consider importing one of these items
       |
    1  | use alloc::vec::Vec;
       |
    1  | use crate::ecmult::vec::Vec;
       |
    
    error[E0412]: cannot find type `Vec` in this scope
      --> /home/pierre/.cargo/registry/src/github.com-1ecc6299db9ec823/libsecp256k1-core-0.2.0/src/ecmult.rs:89:17
       |
    89 |     let mut az: Vec<Field> = Vec::with_capacity(a.len());
       |                 ^^^ not found in this scope
       |
    help: consider importing one of these items
       |
    1  | use alloc::vec::Vec;
       |
    1  | use crate::ecmult::vec::Vec;
       |
    
    error[E0433]: failed to resolve: use of undeclared type `Vec`
      --> /home/pierre/.cargo/registry/src/github.com-1ecc6299db9ec823/libsecp256k1-core-0.2.0/src/ecmult.rs:89:30
       |
    89 |     let mut az: Vec<Field> = Vec::with_capacity(a.len());
       |                              ^^^ not found in this scope
       |
    help: consider importing one of these items
       |
    1  | use alloc::vec::Vec;
       |
    1  | use crate::ecmult::vec::Vec;
       |
    
    error[E0412]: cannot find type `Vec` in this scope
      --> /home/pierre/.cargo/registry/src/github.com-1ecc6299db9ec823/libsecp256k1-core-0.2.0/src/ecmult.rs:95:14
       |
    95 |     let azi: Vec<Field> = inv_all_var(&az);
       |              ^^^ not found in this scope
       |
    help: consider importing one of these items
       |
    1  | use alloc::vec::Vec;
       |
    1  | use crate::ecmult::vec::Vec;
       |
    
    error[E0412]: cannot find type `Vec` in this scope
       --> /home/pierre/.cargo/registry/src/github.com-1ecc6299db9ec823/libsecp256k1-core-0.2.0/src/ecmult.rs:114:41
        |
    114 | pub fn inv_all_var(fields: &[Field]) -> Vec<Field> {
        |                                         ^^^ not found in this scope
        |
    help: consider importing one of these items
        |
    1   | use alloc::vec::Vec;
        |
    1   | use crate::ecmult::vec::Vec;
        |
    
    error[E0433]: failed to resolve: use of undeclared type `Vec`
       --> /home/pierre/.cargo/registry/src/github.com-1ecc6299db9ec823/libsecp256k1-core-0.2.0/src/ecmult.rs:116:16
        |
    116 |         return Vec::new();
        |                ^^^ not found in this scope
        |
    help: consider importing one of these items
        |
    1   | use alloc::vec::Vec;
        |
    1   | use crate::ecmult::vec::Vec;
        |
    
    error[E0433]: failed to resolve: use of undeclared type `Vec`
       --> /home/pierre/.cargo/registry/src/github.com-1ecc6299db9ec823/libsecp256k1-core-0.2.0/src/ecmult.rs:119:19
        |
    119 |     let mut ret = Vec::with_capacity(fields.len());
        |                   ^^^ not found in this scope
        |
    help: consider importing one of these items
        |
    1   | use alloc::vec::Vec;
        |
    1   | use crate::ecmult::vec::Vec;
        |
    
    error[E0412]: cannot find type `Box` in this scope
       --> /home/pierre/.cargo/registry/src/github.com-1ecc6299db9ec823/libsecp256k1-core-0.2.0/src/ecmult.rs:187:27
        |
    187 |     pub fn new_boxed() -> Box<Self> {
        |                           ^^^ not found in this scope
        |
    help: consider importing one of these items
        |
    1   | use alloc::prelude::v1::Box;
        |
    1   | use crate::ecmult::vec::Box;
        |
    
    error[E0433]: failed to resolve: use of undeclared type `Box`
       --> /home/pierre/.cargo/registry/src/github.com-1ecc6299db9ec823/libsecp256k1-core-0.2.0/src/ecmult.rs:194:28
        |
    194 |             let mut this = Box::from_raw(ptr);
        |                            ^^^ not found in this scope
        |
    help: consider importing one of these items
        |
    1   | use alloc::prelude::v1::Box;
        |
    1   | use crate::ecmult::vec::Box;
        |
    
    error[E0412]: cannot find type `Vec` in this scope
       --> /home/pierre/.cargo/registry/src/github.com-1ecc6299db9ec823/libsecp256k1-core-0.2.0/src/ecmult.rs:226:24
        |
    226 |         let mut precj: Vec<Jacobian> = Vec::with_capacity(1024);
        |                        ^^^ not found in this scope
        |
    help: consider importing one of these items
        |
    1   | use alloc::vec::Vec;
        |
    1   | use crate::ecmult::vec::Vec;
        |
    
    error[E0433]: failed to resolve: use of undeclared type `Vec`
       --> /home/pierre/.cargo/registry/src/github.com-1ecc6299db9ec823/libsecp256k1-core-0.2.0/src/ecmult.rs:226:40
        |
    226 |         let mut precj: Vec<Jacobian> = Vec::with_capacity(1024);
        |                                        ^^^ not found in this scope
        |
    help: consider importing one of these items
        |
    1   | use alloc::vec::Vec;
        |
    1   | use crate::ecmult::vec::Vec;
        |
    
    error: aborting due to 19 previous errors
    
    Some errors have detailed explanations: E0412, E0433.
    For more information about an error, try `rustc --explain E0412`.
    error: could not compile `libsecp256k1-core`
    

    To reproduce, just add libsecp256k1 = { version = "0.5.0", default-features = false } as a dependency to a project.

    opened by tomaka 16
  • Added Drop to SharedSecret and SecretKey

    Added Drop to SharedSecret and SecretKey

    • I added the Drop trait to SecretKey and SharedSecret which calls clear(),
    • I replaced the clear function with write_volatile to prevent the compiler from optimizing it out.
    opened by elichai 7
  • CI optimizations

    CI optimizations

    • optimize caching (swatinem's action covers more rust cache)
    • cancel previous CI runs on the new commits
    • pin actions' versions
    • add dependabot to update cargo deps and github actions versions

    Also, I'd like to use simple run: instead of harder-readable special actions, but it's cosmetic I'm not quite sure if sccache is actually helpful here, maybe it's worth a shot next time.

    opened by TriplEight 6
  • v0.3.5 vulnerable to RUSTSEC-2020-0146

    v0.3.5 vulnerable to RUSTSEC-2020-0146

    The most recent Cargo release (v0.3.5) is vulnerable to https://rustsec.org/advisories/RUSTSEC-2020-0146

    All of the affected dependencies are up to date in master. I'd PR a backport but there doesn't seem to be a release branch or consistent tagging :shrug:

    A new release v0.3.x release with dependencies patched would be great. Thanks!

    opened by t-nelson 5
  • Make static context a feature and allow dynamic context generation

    Make static context a feature and allow dynamic context generation

    This changes the static contexts to be a feature that can be enabled or disabled, and allow contexts to be dynamically generated. By disabling static contexts, users accomplish much smaller binary size, but the trade-off is then that contexts must be generated dynamically (which is not a cheap operation).

    opened by sorpaas 5
  • Drop zeroization, impl Copy for everything

    Drop zeroization, impl Copy for everything

    As shown by https://github.com/paritytech/parity-common/pull/400 you can't have reliable memory erasure without keeping it on the heap. Since this is less than acceptable here, we might as well drop zeroization altogether and implement Copy for all types.

    This is a conservative PR. Another one that breaks the APIs by replacing reference arguments with values will follow.

    opened by vorot93 4
  • Use const fn instead of const macros

    Use const fn instead of const macros

    This removes field_const, field_storage_const, field_const_raw, affine_const, jacobian_const macros, and replaces them with const fns Field::new, FieldStorage::new, Field::new_raw, Affine::new, Jacobian::new.

    opened by sorpaas 4
  • Fix ec multiplication under release

    Fix ec multiplication under release

    There were some debug_assert!s with side-effects. These would not be run under release builds. Looking at all debug_assert!s I didn't find other instances where the same mistake was made but please double check as well.

    Fixes #58.

    opened by andresilva 3
  • Consider exposing field, group, and scalar types as public?

    Consider exposing field, group, and scalar types as public?

    Hi, this library is really one-of-a-kind in that it's a pure rust implementation of secp256k1.

    Is it at all possible that the authors would consider exposing the field, group, and scalar types as public types so that we can use them for arithmetic in other libraries to build and prototype with? We have a need for this on a library-in-progress from @nucypher and these exposed types would save a ton of work.

    opened by tuxxy 3
  • Bump styfle/cancel-workflow-action from 0.9.1 to 0.10.0

    Bump styfle/cancel-workflow-action from 0.9.1 to 0.10.0

    Bumps styfle/cancel-workflow-action from 0.9.1 to 0.10.0.

    Release notes

    Sourced from styfle/cancel-workflow-action's releases.

    0.10.0

    Changes

    • Feat(all):support for considering all workflows with one term: #165
    • Chore: rebuild: 74a81dc1a9321342ebc12fa8670cc91600c8c494
    • Chore: update main.yml: #78
    • Bump @​vercel/ncc from 0.28.6 to 0.29.1: #106
    • Bump @​vercel/ncc from 0.29.1 to 0.29.2: #109
    • Bump @​vercel/ncc from 0.29.2 to 0.30.0: #112
    • Bump husky from 7.0.1 to 7.0.2: #110
    • Bump prettier from 2.3.2 to 2.4.0: #116
    • Bump @​vercel/ncc from 0.30.0 to 0.31.1: #115
    • Bump typescript from 4.3.5 to 4.4.3: #114
    • Bump prettier from 2.4.0 to 2.4.1: #117
    • Bump @​actions/github from 4.0.0 to 5.0.0: #89
    • Bump @​actions/core from 1.3.0 to 1.6.0: #118
    • Bump typescript from 4.4.3 to 4.4.4: #119
    • Bump husky from 7.0.2 to 7.0.4: #120
    • Bump typescript from 4.4.4 to 4.5.2: #124
    • Bump @​vercel/ncc from 0.31.1 to 0.32.0: #123
    • Bump prettier from 2.4.1 to 2.5.0: #125
    • Bump prettier from 2.5.0 to 2.5.1: #126
    • Bump @​vercel/ncc from 0.32.0 to 0.33.0: #127
    • Bump typescript from 4.5.2 to 4.5.3: #128
    • Bump @​vercel/ncc from 0.33.0 to 0.33.1: #130
    • Bump typescript from 4.5.3 to 4.5.4: #129
    • Bump typescript from 4.5.4 to 4.5.5: #131
    • Bump node-fetch from 2.6.5 to 2.6.7: #132
    • Bump @​vercel/ncc from 0.33.1 to 0.33.3: #138
    • Bump actions/setup-node from 2 to 3.0.0: #140
    • Bump actions/checkout from 2 to 3: #141
    • Bump typescript from 4.5.5 to 4.6.2: #142
    • Bump prettier from 2.5.1 to 2.6.0: #143
    • Bump prettier from 2.6.0 to 2.6.1: #145
    • Bump actions/setup-node from 3.0.0 to 3.1.0: #146
    • Bump typescript from 4.6.2 to 4.6.3: #144
    • Bump prettier from 2.6.1 to 2.6.2: #147
    • Bump @​actions/github from 5.0.0 to 5.0.1: #148
    • Bump actions/setup-node from 3.1.0 to 3.1.1: #149
    • Bump @​vercel/ncc from 0.33.3 to 0.33.4: #151
    • Bump @​actions/core from 1.6.0 to 1.7.0: #153
    • Bump typescript from 4.6.3 to 4.6.4: #154
    • Bump husky from 7.0.4 to 8.0.1: #155
    • Bump @​actions/core from 1.7.0 to 1.8.0: #156
    • Bump actions/setup-node from 3.1.1 to 3.2.0: #159
    • Bump @​actions/github from 5.0.1 to 5.0.3: #157
    • Bump @​actions/core from 1.8.0 to 1.8.2: #158
    • Bump typescript from 4.6.4 to 4.7.2: #160
    • Bump @​vercel/ncc from 0.33.4 to 0.34.0: #161
    • Bump typescript from 4.7.2 to 4.7.3: #163

    ... (truncated)

    Commits

    Dependabot compatibility score

    You can trigger a rebase of this PR by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    opened by dependabot[bot] 2
  • About link is 404

    About link is 404

    In the "About" section of the github repo, there's a link to https://source.that.world/source/libsecp256k1-rs/ under the description, which is 404.

    Probably this should just be removed in favour of the crates.io and docs.rs pages.

    opened by rillian 2
  • Add clean() and is_zero() to SecretKey to clean up the memories

    Add clean() and is_zero() to SecretKey to clean up the memories

    This pull request aimed to solve #130, example use case:

    // Generate raw key pair in bytes array
    pub fn generate_raw_keypair() -> RawKeyPair {
        let mut rng = thread_rng();
        let secret = SecretKey::random(&mut rng);
        let secret_key = secret.serialize();
        secret.clear();
        let public_key = PublicKey::from_secret_key(&secret).serialize();
        RawKeyPair {
            public_key,
            secret_key,
        }
    }
    
    opened by chiro-hiro 0
  • Please support Scalar comparision

    Please support Scalar comparision

    We are using libsecp256k1 to implement ECVRF, it's a little bit struggle to compare Scalar types. Could you guys consider it as a part of this crate?.

    opened by chiro-hiro 0
  • Update Digest dependency

    Update Digest dependency

    Digest is stuck on version 0.9 which is outdated and breaks compatibility with crates like sha3. I noticed that there is a branch that adds the newer version of digest.

    opened by undersquire 0
  • fix: no-std compatibility tweak (#1)

    fix: no-std compatibility tweak (#1)

    Problem

    Current sp-core crate (version 7.0.0) with feature full_crypto depends on libsecp256k1 crate with version = "0.7", default-features = false, features = ["static-context"]. full_crypto is a feature intended for no_std support and libsecp256k1 with default-features = false is supposed to work with no_std. However, libsecp256k1 with default-features = false currently does not compile at least on targets thumbv7m-none-eabi and thumbv7em-none-eabi causing sp-core in full_crypto to not compile as well.

    Possible fix

    [build-dependencies] contain libsecp256k1-gen-ecmult and libsecp256k1-gen-genmult, both depending on libsecp256k1-core with default features (i.e. in std mode). If the Cargo.toml files for both libsecp256k1-gen-ecmult and libsecp256k1-gen-genmult are changed to have libsecp256k1-core with default-features = false, things keep building as before in std and begin to build in no-std as well. Also, a few dependencies (serde and base64) get used only in std, but were not marked as optional = true, although this does not affect buildability.

    We will maintain a thus fixed version of the crate for Kampela development and switch to this upstream if the issue gets resolved.

    opened by Slesarew 0
  • Bump Swatinem/rust-cache from 2.0.1 to 2.2.0

    Bump Swatinem/rust-cache from 2.0.1 to 2.2.0

    Bumps Swatinem/rust-cache from 2.0.1 to 2.2.0.

    Release notes

    Sourced from Swatinem/rust-cache's releases.

    v2.2.0

    • Add new save-if option to always restore, but only conditionally save the cache.

    v2.1.0

    • Only hash Cargo.{lock,toml} files in the configured workspace directories.

    v2.0.2

    • Avoid calling cargo metadata on pre-cleanup.
    • Added prefix-key, cache-directories and cache-targets options.
    Changelog

    Sourced from Swatinem/rust-cache's changelog.

    Changelog

    2.2.0

    • Add new save-if option to always restore, but only conditionally save the cache.

    2.1.0

    • Only hash Cargo.{lock,toml} files in the configured workspace directories.

    2.0.2

    • Avoid calling cargo metadata on pre-cleanup.
    • Added prefix-key, cache-directories and cache-targets options.

    2.0.1

    • Primarily just updating dependencies to fix GitHub deprecation notices.

    2.0.0

    • The action code was refactored to allow for caching multiple workspaces and different target directory layouts.
    • The working-directory and target-dir input options were replaced by a single workspaces option that has the form of $workspace -> $target.
    • Support for considering env-vars as part of the cache key.
    • The sharedKey input option was renamed to shared-key for consistency.

    1.4.0

    • Clean both debug and release target directories.

    1.3.0

    • Use Rust toolchain file as additional cache key.
    • Allow for a configurable target-dir.

    1.2.0

    • Cache ~/.cargo/bin.
    • Support for custom $CARGO_HOME.
    • Add a cache-hit output.
    • Add a new sharedKey option that overrides the automatic job-name based key.

    1.1.0

    • Add a new working-directory input.
    • Support caching git dependencies.
    • Lots of other improvements.

    ... (truncated)

    Commits

    Dependabot compatibility score

    You can trigger a rebase of this PR by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    opened by dependabot[bot] 0
  • Bump actions/upload-artifact from 3.1.0 to 3.1.1

    Bump actions/upload-artifact from 3.1.0 to 3.1.1

    Bumps actions/upload-artifact from 3.1.0 to 3.1.1.

    Release notes

    Sourced from actions/upload-artifact's releases.

    v3.1.1

    • Update actions/core package to latest version to remove set-output deprecation warning #351
    Commits

    Dependabot compatibility score

    You can trigger a rebase of this PR by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    opened by dependabot[bot] 0
Owner
Parity Technologies
Solutions for a trust-free world
Parity Technologies
An i386 operation system written in pure rust for fun and no profit.

OrustS An i386 operation system written in pure rust (for fun and no profit). This operation system is under active developing. Checklist implement a

M4tsuri 10 Aug 12, 2022
Highly experimental, pure-Rust big integer library

grou-num (Pronounced "groo", from the Chiac meaning "big") This package is a highly experimental, unstable big integer library. I would not recommend

Patrick Poitras 1 Dec 18, 2021
Pure-Rust DTLS

dustls, a pure-rust DTLS implementation A DTLSv1.2 implementation in Rust, reusing rustls for cryptographic primitives and most message payload format

Jonathan de Jong 10 Nov 28, 2022
An mdBook single PDF generator using pure Rust and some Node.js

mdbook-compress An mdBook backend renderer to generate a single PDF file for a full book. There are other similar projects, but most rely on chrome in

nxe 44 Jan 20, 2023
Generic inventory system built in pure rust.

game_inventory A framework for generalizing inventory logic and abstracting it away from item data in your specific game. See more examples and specif

null 7 Jul 30, 2022
A pure-rust(with zero dependencies) fenwick tree, for the efficient computation of dynamic prefix sums.

indexset A pure-rust(with zero dependencies, no-std) fenwick tree, for the efficient computation of dynamic prefix sums. Background Did you ever have

Bruno Rucy Carneiro Alves de Lima 2 Jul 13, 2023
High-order Virtual Machine (HVM) is a pure functional compile target that is lazy, non-garbage-collected and massively parallel

High-order Virtual Machine (HVM) High-order Virtual Machine (HVM) is a pure functional compile target that is lazy, non-garbage-collected and massivel

null 5.5k Jan 2, 2023
Rust implementation of Andrej Karpathy's micrograd for purposes of learning both ML and Rust.

micrograd_rs Rust implementation of Andrej Karpathy's micrograd for purposes of learning both ML and Rust. Main takeaways Basically the same takeaways

null 3 Oct 28, 2022
Ray Tracing: The Next Week implementation in Rust

rttnw Ray Tracing: The Next Week implementation in Rust How to run Install Rust: Link here. Run project git clone https://github.com/luliic2/rttnw cd

null 20 Apr 26, 2022
Rust implementation of µKanren, a featherweight relational programming language.

µKanren-rs This is a Rust implementation of µKanren, a featherweight relational programming language. See the original Scheme implementation here for

Eric Zhang 99 Dec 8, 2022
A Rust implementation of generic prefix tree (trie) map with wildcard capture support

prefix_tree_map A Rust implementation of generic prefix tree (trie) map with wildcard capture support. Design Trie is a good data structure for storin

EAimTY 3 Dec 6, 2022
fast rust implementation of online nonnegative matrix factorization as laid out in the paper "detect and track latent factors with online nonnegative matrix factorization"

ONMF status: early work in progress. still figuring this out. code still somewhat messy. api still in flux. fast rust implementation of online nonnega

null 2 Apr 10, 2020
A modular implementation of timely dataflow in Rust

Timely Dataflow Timely dataflow is a low-latency cyclic dataflow computational model, introduced in the paper Naiad: a timely dataflow system. This pr

Timely Dataflow 2.7k Dec 30, 2022
An alternative broken buggy Nix implementation in Rust + Java (for evaluation)

An alternative broken buggy Nix implementation in Rust + Java (for evaluation)

Moritz Hedtke 1 Feb 12, 2022
A fast lean and clean modern constraint programming solver implementation (in rust)

MaxiCP-rs This project aims at implementing a fast, and clean constraint programming solver with a focus on correctness, simplicity, maintainability a

Xavier Gillard 5 Dec 10, 2022
Rust implementation of Waku v2 (f.k.a. Whisper)

waku-rs Waku is a p2p messaging protocol tailored for the web3, with origins in Ethereum's Whisper. This Rust implementation is taking reference from

bernardo 12 Jul 11, 2022
The second Rust implementation on GitHub of third-party REST API client for Bilibili.

Bilibili REST API The second Rust implementation on GitHub of third-party REST API client for Bilibili. Designed to be lightweight and efficient. It's

null 4 Aug 25, 2022
Rust-only ext4 implementation without unsafe code.

Rust-Ext4 Rust-only ext4 implementation without unsafe code. Supporting features no_std Direct/Indirect Block Addressing (RO) Extent Tree Addressing (

null 7 Dec 5, 2022
Rust implementation of DVB-GSE

dvb-gse dvg-se is a Rust implementation of the DVB GSE (Generic Stream Encapsulation) protocol and related protocols. It is mainly intended to be used

Daniel Estévez 4 Dec 15, 2022