An experimental Rust crate for sigstore

Overview
Continuous integration Docs License
Continuous integration Docs License: Apache 2.0

This is an experimental crate to interact with sigstore.

This is under high development, many features and checks are still missing.

Right now I've been focusing on implementing the verification bits required to verify something that has been previously signed with cosign.

Examples

Verification

Create a keypair using the official cosign client:

cosign generate-key-pair

Sign a container image:

cosign sign -key cosign.key registry-testing.svc.lan/busybox

Verify the image signature using the example program defined under examples/verify:

cargo run --example verify -- -k cosign.pub registry-testing.svc.lan/busybox

Security

Should you discover any security issues, please refer to sigstores security process

Comments
  • Removed ring dependency

    Removed ring dependency

    Summary

    Due to https://github.com/sigstore/sigstore-rs/issues/27. This pr removed ring crate, and use RustCrypto crates instead.

    Release Note

    • replaced ring crate with RustCrypto
    • refactored CosignVerificationKey implementation and interface
    • fixed the code which references CosignVerificationKey
    • added RSA keys and signing algorithms support (RSA PSS & RSA PKCS#1 v1.5)
    API Changes
    • Changed all the from_XXX functions for CosignVerificationKey's SignatureDigestAlgorithm parameter into SigningScheme
    • Deleted the enum SignatureDigestAlgorithm
    • Replace struct CosignVerificationKey into enum.

    Documentation

    opened by Xynnn007 30
  • Key generation and signer interface

    Key generation and signer interface

    Much like the go counterpart in sigstore/sigstore, implement key generation and a signer interface. This should provide the following:

    1. Generate of a key pair using a provided alg (rsa, ecdsa)
    2. public key derive from private key
    3. Signing interface
    4. Serialisation (handle PEM / DER en/decode etc).
    enhancement 
    opened by lukehinds 16
  • feat: add signing key module

    feat: add signing key module

    Summary

    Due to https://github.com/sigstore/sigstore-rs/issues/27, sigstore-rs needs key generation and signing interfaces.

    This pr aims to give a framework for signer and key pairs.

    The KDF refers to go counterpart in sigstore/sigstore

    Release Note

    • Definition of interface for key generation, derivation of private and public keys and signing.

    The interface for KeyPair included:

    fn public_key_to_pem(&self) -> Result<String>;
    fn public_key_to_der(&self) -> Result<Vec<u8>>;
    fn private_key_to_encrypted_pem(&self, password: &[u8]) -> Result<Zeroizing<String>>;
    fn private_key_to_pem(&self) -> Result<Zeroizing<String>>;
    fn private_key_to_der(&self) -> Result<Zeroizing<Vec<u8>>>;
    

    And a Signer

    fn key_pair(&self) -> &dyn KeyPair;
    fn sign(&self, msg: &[u8]) -> Result<Vec<u8>>;
    
    • ECDSA was implemented.
    let ec_key_pair = EcdsaKeys::<p256::NistP256>::new().unwrap();
    
    • For easy to use signing schemes, use an enum interface, like
    let signer = SigStoreSigner::new(SigningScheme::ECDSA_P256_SHA256_ASN1).unwrap();
    let sig = signer.sign(b"test message").unwrap();
    

    Documentation

    NONE

    opened by Xynnn007 15
  • Add support for OCI Image signing (spec v1.0)

    Add support for OCI Image signing (spec v1.0)

    Summary

    This PR helps to implement OCI Image Signing due to https://github.com/sigstore/sigstore-rs/issues/125.

    But please notice that this PR only uses the OCI Spec v1.0 (instead of v1.1, which brings referrer mechinism)

    Release Note

    • Added push related functions for ClientCapabilities and related impls
    • Fixed a bug when converting sigstore::ClientConfig into oci_distribution::ClientConfig
    • Fixed a bug when parsing a private key file RSA was not considered.
    • Added some Debug, ToString, Eq, PartialEq macros and functions to enums and structs of crypto mod.
    • Refactored SimpleSigning as a sub module for payloads
    • Added OCI Image signing support together with some unit tests and examples.
    • Changed signature field of SignatureLayer into an Option, which helps when we meet a SignatureLayer that is to be signed.
    • Added a switch of http/https when access a registry for examples/cosign/verify

    Documentation

    Please see the examples/cosign/sign/README.md for the guide of OCI Image Signing.

    opened by Xynnn007 12
  • Use right fulcio certificate when verifying bundles

    Use right fulcio certificate when verifying bundles

    Description

    Fulcio has updated its certificate. Right now, inside of Sigstore's TUF repository there are 2 certificates:

    • fulcio.crt.pem
    • fulcio_v1.crt.pem

    Keyless signatures produced some months ago have been signed with fulcio.crt.pem, while more recent ones have been signed with fulcio_v1.crt.pem.

    Right now the cosign::Client uses just one certificate, which causes some signatures to fail verification.

    Apparently the cosign client isn't affected by this issue. We should understand how the upstream client handles that, and replicate the behaviour here.

    bug 
    opened by flavio 12
  • Add functionality to make an entry in Rekor

    Add functionality to make an entry in Rekor

    This is a draft pull request, but I would really appreciate getting some feedback.

    Signed-off-by: jyotsna-penumaka [email protected]

    Summary

    Ticket Link

    Fixes

    Release Note

    
    
    opened by jyotsna-penumaka 8
  • Are we using OpenAPI?

    Are we using OpenAPI?

    Quick question about our rekor submodule... a lot of the files (example here) have a header stating they are generated by OpenAPI, meaning they should not be edited manually. But I don't see any .yaml files included at all. Are we meant to have an openapi.yaml file somewhere to do this? Or are we intending to edit these files manually, and the header was left in by mistake?

    question 
    opened by lkatalin 7
  • Set tag to COSIGN_PRIVATE_KEY_PEM_LABEL for ec.rs

    Set tag to COSIGN_PRIVATE_KEY_PEM_LABEL for ec.rs

    Signed-off-by: Daniel Bevenius [email protected]

    Summary

    This commit suggests changing the tag used in EcdsaKeys::private_key_to_encrypted_pem from SIGSTORE_PRIVATE_KEY_PEM_LABEL to COSIGN_PRIVATE_KEY_PEM_LABEL.

    The motivation for this is that using such a key with Go cosign will currently result in an unsupported pem type error. It seems like Go cosign is using CosignPrivateKeyPemType when checking the tag of the pem.

    I'm not sure about the differences between SIGSTORE_PRIVATE_KEY_PEM_LABEL and COSIGN_PRIVATE_KEY_PEM_LABEL and I might be missing something here but if the change in this PR is a valid then this should probably be done for rsa and ed25519 as well.

    Release Note

    NONE

    Documentation

    NONE

    opened by danbev 7
  • Block unsafe and have clippy warn on unsafe|panic

    Block unsafe and have clippy warn on unsafe|panic

    I added exceptions to instances of unwrap that have a comment justifying use.

    We now need to either toggle the last to handling the Option / Result or use except.

    Test uses of unwrap will be ignored (as will examples)

    Blocks unsafe

    Signed-off-by: Luke Hinds [email protected]

    opened by lukehinds 7
  • Fulcio client

    Fulcio client

    Fixes https://github.com/sigstore/sigstore-rs/issues/131

    Summary

    Creates an async Fulcio client to make working with Fulcio more straightfoward.

    Release Note

    • Fulcio client for exchanging public key for signed certificate added.

    Documentation

    Rust docs provided.

    opened by bobmcwhirter 5
  • Update xsalsa20poly1305 requirement from 0.7.1 to 0.9.0

    Update xsalsa20poly1305 requirement from 0.7.1 to 0.9.0

    Updates the requirements on xsalsa20poly1305 to permit the latest version.

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually 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)
    dependencies rust 
    opened by dependabot[bot] 5
  • Add conformance testing

    Add conformance testing

    Hello sigstore-rs devs!

    Description

    This is a tracking issue for conformance testing between this client implementation and other Sigstore clients, similar to https://github.com/sigstore/sigstore-java/issues/236 and https://github.com/sigstore/sigstore-python/issues/297.

    The rough idea here:

    • Implement a small "driver" for this Sigstore client, one that adheres to the CLI protocol for the conformance suite
    • Add a new conformance.yml workflow that applies the trailofbits/sigstore-conformance action via the driver

    @tetsuo-cpp and I are happy to take a stab at the work here, whenever you feel it's appropriate!

    cc @di

    enhancement 
    opened by woodruffw 0
  • Making fulcio and rekor clients independent of reqwest

    Making fulcio and rekor clients independent of reqwest

    I'm interested in package signing support in crates.io + cargo using Sigstore. After looking through some of the earlier discussions from @lukehinds and others, it seems to me that the main obstacle is that crates.io and cargo teams have little time to work on this and/or review. In order to push things forward, I'm exploring an approach that could be used as basis for an RFC, with little changes to the existing crates.io and cargo code bases to reduce friction in adding the support and migrating existing infrastructure.

    One of the things I've found is that cargo currently uses the curl (+ curl-sys) crate for HTTP, and does not support async Rust. I think it's going to be hard to justify changing a big chunk of cargo dependencies for this, so I'd like to hear others think.

    Could it make sense to modify the fulcio and rekor clients, or alternatively create a set of clients with a lower level API, that could be re-used in places like cargo?

    enhancement 
    opened by lulf 3
  • Update generation of models from OpenAPI to protobuf

    Update generation of models from OpenAPI to protobuf

    Here is the issue to align how models in the various repos are generated: https://github.com/sigstore/protobuf-specs/issues/3 Also, more detailed discussion here.

    enhancement 
    opened by lkatalin 0
  • Switch to Fulcio V2 API

    Switch to Fulcio V2 API

    Description

    The Fulcio V1 API will be turned down in the coming months.

    https://github.com/sigstore/sigstore-rs/blob/main/src/fulcio/mod.rs#L20 will need to be updated to https://github.com/sigstore/fulcio/blob/main/fulcio.proto#L65. Fulcio V2 supports either gRPC or HTTP.

    enhancement 
    opened by haydentherapper 0
  • TUF: Target naming for usage

    TUF: Target naming for usage

    Description

    In the next root-signing, we'll be migrating targets for fulcio under a fulcio subdirectory, and rekor under a rekor subdirectory (and keeping old targets for compatibility before we remove them).

    This change was due to the fact that we had created delegations that were allowed to sign off on any path, but we actually only intend on certain delegations to add/update targets for a certain usage type (e.g. a delegation managing rekor rotations should only sign on the rekor/** space).

    When we do this, fulcio targets will now be found on fulcio/* and rekor targets will be found on rekor/*. This may simplify some of the expressions for target matching SIGSTORE_FULCIO_CERT_TARGET_REGEX and SIGSTORE_REKOR_PUB_KEY_TARGET, since now their regex are simply fulcio/* or rekor/*. Old clients may continue to use this for a few months, given that we will continue supporting the top-level targets at their given paths, but we'd like clients to start moving towards retrieving fulcio certs by retrieving all targets under fulcio/*.

    A few questions:

    1. Does this targets() func retrieve delegated targets? Or just top-level targets? One way to find out is if you find a revocation.list returned in the current root. That is a delegated target not listed in the top-level targets.
    2. When we totally remove the top-level original paths (rekor.pub and fulcio*.crt.pem) in favor of nesting them under subdirectories, will you need to continue to support old clients?
    enhancement 
    opened by asraa 2
Releases(v0.6.0)
  • v0.6.0(Nov 24, 2022)

    What's Changed

    • Fix typo in cosign/mod.rs doc comment by @danbev in https://github.com/sigstore/sigstore-rs/pull/148
    • Fix typo in KeyPair trait doc comment by @danbev in https://github.com/sigstore/sigstore-rs/pull/149
    • Add getter functions for LogEntry fields by @lkatalin in https://github.com/sigstore/sigstore-rs/pull/147
    • Add TreeSize alias to Rekor by @avery-blanchard in https://github.com/sigstore/sigstore-rs/pull/151
    • Updates for parsing hashedrekord LogEntry by @lkatalin in https://github.com/sigstore/sigstore-rs/pull/152
    • Update cached requirement from 0.39.0 to 0.40.0 by @dependabot in https://github.com/sigstore/sigstore-rs/pull/154
    • Fix typos in PublicKeyVerifier doc comments by @danbev in https://github.com/sigstore/sigstore-rs/pull/155
    • Update link to verification example by @danbev in https://github.com/sigstore/sigstore-rs/pull/156
    • fix: CI error for auto deref by @Xynnn007 in https://github.com/sigstore/sigstore-rs/pull/160
    • Remove unused imports in examples/rekor by @danbev in https://github.com/sigstore/sigstore-rs/pull/162
    • Fix typo and grammar in signature_layers.rs by @danbev in https://github.com/sigstore/sigstore-rs/pull/161
    • add certificate based verification by @flavio in https://github.com/sigstore/sigstore-rs/pull/159
    • Fix typos in from_encrypted_pem doc comments by @danbev in https://github.com/sigstore/sigstore-rs/pull/164
    • Fix typos in doc comments by @danbev in https://github.com/sigstore/sigstore-rs/pull/163
    • Add support for OCI Image signing (spec v1.0) by @Xynnn007 in https://github.com/sigstore/sigstore-rs/pull/158
    • Update path to fulcio-cert in verify example by @danbev in https://github.com/sigstore/sigstore-rs/pull/168

    New Contributors

    • @danbev made their first contribution in https://github.com/sigstore/sigstore-rs/pull/148
    • @avery-blanchard made their first contribution in https://github.com/sigstore/sigstore-rs/pull/151

    Full Changelog: https://github.com/sigstore/sigstore-rs/compare/v0.5.3...v0.6.0

    Source code(tar.gz)
    Source code(zip)
  • v0.5.3(Oct 21, 2022)

    Fixes

    • rustls should not require openssl by (https://github.com/sigstore/sigstore-rs/pull/146)

    Others

    • Rework Rekor module structure and enable doc tests (https://github.com/sigstore/sigstore-rs/pull/145)

    Contributors

    • Flavio Castelli (@flavio)
    • Lily Sturmann (@lkatalin)
    Source code(tar.gz)
    Source code(zip)
  • v0.5.2(Oct 13, 2022)

  • v0.5.1(Oct 13, 2022)

    Fixes

    • fix verification of signatures produced with PKI11 (https://github.com/sigstore/sigstore-rs/pull/142)

    Others

    • Update rsa dependency to stable version 0.7.0 (https://github.com/sigstore/sigstore-rs/pull/141)
    • Bump actions/checkout from 3.0.2 to 3.1.0 (https://github.com/sigstore/sigstore-rs/pull/140)

    Contributors

    • Flavio Castelli (@flavio)
    • Xynnn (@Xynnn007)
    Source code(tar.gz)
    Source code(zip)
  • v0.5.0(Oct 7, 2022)

    Enhancements

    • update user-agent value to be specific to sigstore-rs (https://github.com/sigstore/sigstore-rs/pull/122)
    • remove /api/v1/version from client by (https://github.com/sigstore/sigstore-rs/pull/121)
    • crate async fulcio client (https://github.com/sigstore/sigstore-rs/pull/132)
    • Removed ring dependency (https://github.com/sigstore/sigstore-rs/pull/127)

    Others

    • Update dependencies
    • Refactoring and examples for key interface (https://github.com/sigstore/sigstore-rs/pull/123)
    • Fix doc test failures (https://github.com/sigstore/sigstore-rs/pull/136)

    Contributors

    • Bob Callaway (@bobcallaway)
    • Bob McWhirter (@bobmcwhirter)
    • Flavio Castelli (@flavio)
    • Luke Hinds (@lukehinds)
    • Xynnn (@Xynnn007)
    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Sep 1, 2022)

    What's Changed

    • fix clippy lints by @cpanato in https://github.com/sigstore/sigstore-rs/pull/98
    • feat: add signing key module by @Xynnn007 in https://github.com/sigstore/sigstore-rs/pull/87
    • feat: add example case and docs for key interface by @Xynnn007 in https://github.com/sigstore/sigstore-rs/pull/99
    • add clippy config and ignore derive_partial_eq_without_eq by @cpanato in https://github.com/sigstore/sigstore-rs/pull/102
    • Update xsalsa20poly1305 requirement from 0.7.1 to 0.9.0 by @tarcieri in https://github.com/sigstore/sigstore-rs/pull/101
    • Integrate Rekor with Sigstore-rs by @jyotsna-penumaka in https://github.com/sigstore/sigstore-rs/pull/88
    • Refactor examples to support subfolder execution by @lukehinds in https://github.com/sigstore/sigstore-rs/pull/111
    • Add RUSTSEC-2021-0139 to audit.toml by @lukehinds in https://github.com/sigstore/sigstore-rs/pull/112
    • Update tough dependency by @flavio in https://github.com/sigstore/sigstore-rs/pull/114
    • Update readme to include new features by @lukehinds in https://github.com/sigstore/sigstore-rs/pull/113
    • feat: from and to interface for signing and verification keys by @Xynnn007 in https://github.com/sigstore/sigstore-rs/pull/115
    • bump crate version by @cpanato in https://github.com/sigstore/sigstore-rs/pull/118

    New Contributors

    • @Xynnn007 made their first contribution in https://github.com/sigstore/sigstore-rs/pull/87
    • @tarcieri made their first contribution in https://github.com/sigstore/sigstore-rs/pull/101
    • @jyotsna-penumaka made their first contribution in https://github.com/sigstore/sigstore-rs/pull/88

    Full Changelog: https://github.com/sigstore/sigstore-rs/compare/v0.3.3...v0.4.0

    Source code(tar.gz)
    Source code(zip)
  • v0.3.3(Aug 9, 2022)

    Changes since v0.3.2:

    • Ensure certificates using ECDSA keys keep working (bf908074203326e9d51c8ad7ee8c4298149cee66)
    • Extend README to cover OIDC usage
    • Update dependencies
    Source code(tar.gz)
    Source code(zip)
  • v0.3.2(Jun 23, 2022)

    These are the changes since v0.3.1

    • fix: add Fulcio intermediate CA certificate to intermediate pool - fixes issue #70
    • Update some dependencies to latest stable releases
    Source code(tar.gz)
    Source code(zip)
  • v0.3.1(May 26, 2022)

    These are the changes since v0.2.0:

    • fix: Add a license entry inside of Cargo.toml. This is needed in order to publish the crate on creates.io
    • feat: public key verification - handle different kind of algorithms
    • fix [break API]: replace the filter_signature_layers function with cosign::filter_constraints
    • feat: add new Error type SigstoreVerifyConstraintsError to keep track of the verification constraints that are not satisfied
    • feat: rewrite certificate verification code to leverage a CertificatePool. This allows more Fulcio certificates to be added to the pool.
    • fix: handle all the Fulcio certificates found inside of the TUF repository of Sigstore
    • feat: cosign client - introduce caching option
    • feat: add helpers for retrieving a OpenID Connect ID Token and scope from the sigstore project

    Full Changelog: https://github.com/sigstore/sigstore-rs/compare/v0.3.0...v0.3.1

    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(May 25, 2022)

    These are the changes since v0.2.0:

    • feat: public key verification - handle different kind of algorithms
    • fix [break API]: replace the filter_signature_layers function with cosign::filter_constraints
    • feat: add new Error type SigstoreVerifyConstraintsError to keep track of the verification constraints that are not satisfied
    • feat: rewrite certificate verification code to leverage a CertificatePool. This allows more Fulcio certificates to be added to the pool.
    • fix: handle all the Fulcio certificates found inside of the TUF repository of Sigstore
    • feat: cosign client - introduce caching option
    • feat: add helpers for retrieving a OpenID Connect ID Token and scope from the sigstore project
    Source code(tar.gz)
    Source code(zip)
  • v0.1.0(Nov 4, 2021)

    What's Changed

    • Internal refactoring by @flavio in https://github.com/sigstore/sigstore-rs/pull/5
    • Implement verification of cosign bundles - no fulcio integration. Warning: this breaks the old API

    Full Changelog: https://github.com/sigstore/sigstore-rs/compare/v0.0.1...v0.1.0

    Source code(tar.gz)
    Source code(zip)
Owner
sigstore
software supply chain security
sigstore
Experimental syntax for Rust

Osy.rs Experimental syntax for Rust Hey everyone, this readme needs work! The spec has been roughed out in Osy.rs_spec.alpha, but the file could be be

null 3 Dec 17, 2021
Experimental playground for wiktionary data

wikt Experimental playground for wiktionary data. This document might not update as often as the code does. Set up You'll want a minimum of 10 GB free

Félix Saparelli 8 Jul 9, 2022
An experimental programming language for exploring first class iterators.

An experimental programming language for exploring first class iterators.

Miccah 4 Nov 23, 2021
Experimental Valve Index camera passthrough for Linux

Index camera passthrough Warning: This is still a work in progress, you could get motion sickness if you try it now The problem that the Index camera

yshui 22 Dec 1, 2022
An experimental implementation of Arc against Apache Datafusion

box This is an experimental repository to perform a proof of concept replacement of the Apache Spark executor for Arc with Apache DataFusion. This is

tripl.ai 1 Nov 26, 2021
An experimental transpiler to bring tailwind macros to SWC 🚀

stailwc (speedy tailwind compiler) This is an experimental SWC transpiler to bring compile time tailwind macros to SWC (and nextjs) a-la twin macro. T

Alexander Lyon 139 Dec 20, 2022
An experimental RISC-V recompiler

WARNING: All of this code is highly experimental and is a direct result of a two day hacking binge fueled by a truckload of tea. It's definitely not s

Koute 13 Apr 2, 2023
An experimental Athena extension for DuckDB 🐤

DuckDB Athena Extension WARNING This is a work in progress - things may or may not work as expected ??‍♂️ Limitations Only the default database is sup

Damon P. Cortesi 34 Apr 3, 2023
Rust crate which provides direct access to files within a Debian archive

debarchive This Rust crate provides direct access to files within a Debian archive. This crate is used by our debrep utility to generate the Packages

Pop!_OS 11 Dec 18, 2021
Granular locking crate for Rust

Granular locking crate for Rust. Instead of using coarse-grained Mutex or RwLock which can be used to lock an entire structure, glock provides more granular locking.

Ayman Madkour 9 Jul 22, 2022
A crate to implement leader election for Kubernetes workloads in Rust.

Kubernetes Leader Election in Rust This library provides simple leader election for Kubernetes workloads.

Hendrik Maus 33 Dec 29, 2022
This crate allows writing a struct in Rust and have it derive a struct of arrays layed out in memory according to the arrow format.

Arrow2-derive - derive for Arrow2 This crate allows writing a struct in Rust and have it derive a struct of arrays layed out in memory according to th

Jorge Leitao 29 Dec 27, 2022
Tiny Rust crate to iterate bit combinations

bit_combi_iter bit_combi_iter is a small dependency-free crate to enumerate all bit combinations less than given unsigned integer value keeping 1s in

Linda_pp 5 Apr 11, 2022
Membrane is an opinionated crate that generates a Dart package from a Rust library. Extremely fast performance with strict typing and zero copy returns over the FFI boundary via bincode.

Membrane is an opinionated crate that generates a Dart package from a Rust library. Extremely fast performance with strict typing and zero copy returns over the FFI boundary via bincode.

Jerel Unruh 70 Dec 13, 2022
Rust crate for reading SER files used in astrophotography

Rust crate for reading SER files used in astrophotography.

Andy Grove 2 Oct 4, 2021
A Rust crate for handling URNs.

URN A Rust crate for handling URNs. Parsing and comparison is done according to the spec (meaning only part of the URN is used for equality checks). S

null 7 Jun 25, 2022
The efficient and elegant crate to count variants of Rust's Enum.

variant-counter The efficient and elegant crate to count variants of Rust's Enum. Get started #[derive(VariantCount)] #[derive(VariantCount)] pub enum

Folyd 16 Sep 29, 2022
This crate allows you to safely initialize Dynamically Sized Types (DST) using only safe Rust.

This crate allows you to safely initialize Dynamically Sized Types (DST) using only safe Rust.

Christofer Nolander 11 Dec 22, 2022
Rust crate that provides a convenient macro to quickly plot variables.

Debug Plotter This crate provides a convenient macro to quickly plot variables. Documentation For more information on how to use this crate, please ta

Fabian Bösiger 82 Dec 31, 2022