🔐 Encrypts all the Serialize.

Overview

serde-encrypt

crates.io Crates.io docs.rs MSRV ci codecov License: MIT License: Apache 2.0

serde-encrypt logo

🔐 Encrypts all the Serialize.

               Alice                                         Bob
+-----------------------------------+        +-----------------------------------+
| #[derive(Serialize, Deserialize)] |        | #[derive(Serialize, Deserialize)] |
| struct Message                    |        | struct Message                    |
+-----------------------------------+        +-----------------------------------+
                 | .encrypt()                                  ^
                 v                                             | ::decrypt()
+-----------------------------------+        +-----------------------------------+
| struct EncryptedMessage           |        | struct EncryptedMessage           |
+-----------------------------------+        +-----------------------------------+
                 | .serialize()                                ^
                 v                                             | ::deserialize()
+-----------------------------------+        +-----------------------------------+
| struct Vec<u8>                    | -----> | struct Vec<u8>                    |
+-----------------------------------+        +-----------------------------------+

Overview

serde-encrypt encrypts/decrypts any structs and enums that implements serde::{Serialize, Deserialize}.

serde-encrypt supports both shared-key encryption (XChaCha20-Poly1305) and public-key encryption (XChaCha20-Poly1305 with X25519 key-exchange), both of which are considered to be secure enough.

serde-encrypt is optionally available in no_std environments.

[dependencies]
serde-encrypt = "(version)"  # If you use std
serde-encrypt = {version = "(version)", default-features = false}  # If you need no_std

Example

Good first example from shared key encryption test.

If you and your peer already have shared-key, just implement SerdeEncryptSharedKey trait to your Serialize and Deserialize data types.

#[derive(Debug, Serialize, Deserialize)]
struct Message {
    content: String,
    sender: String,
}

impl SerdeEncryptSharedKey for Message {
    type S = BincodeSerializer<Self>;  // you can specify serializer implementation (or implement it by yourself).
}

Then, you can serialize the Message into Vec<u8> in encrypted form.

    let shared_key = [0u8; 32];  // or read from your filesystem?

    let msg = Message {
        content: "I ❤️ you.".to_string(),
        sender: "Alice".to_string(),
    };
    let encrypted_message = msg.encrypt(&shared_key)?;
    let serialized_encrypted_message: Vec<u8> = encrypted_message.serialize()?;

After your peer gets the binary, he or she can decrypt and deserialize it to Message.

    let shared_key = [0u8; 32];  // or your peer reads from filesystem?

    let encrypted_message = EncryptedMessage::deserialize(serialized_encrypted_message)?;
    let msg = Message::decrypt_owned(&encrypted_message, &shared_key)

Further examples...

Features and uses cases

Feature comparison

SerdeEncryptSharedKey SerdeEncryptSharedKeyDeterministic SerdeEncryptPublicKey
(a)symmetric? symmetric symmetric asymmetric
deterministic? (*1) no yes no
performance high high low

(*1) Deterministic encryptions always produce the same cipher-text from a given plain-text. More vulnerable but useful for equal-matching in cipher-text (e.g. RDBMS's encrypted index eq-search).

Encryption algorithm

SerdeEncryptSharedKey SerdeEncryptSharedKeyDeterministic SerdeEncryptPublicKey
key exchange - - X25519
encryption XChaCha20 XChaCha20 XChaCha20
message auth Poly1305 Poly1305 Poly1305
nonce (*2) XSalsa20 (random 24-byte) Fixed 24-byte XSalsa20 (random 24-byte)
Rng (*3) for nonce ChaCha20Rng - ChaCha20Rng
Implementation XChaCha20Poly1305 XChaCha20Poly1305 ChaChaBox

(*2) "Number used once": to make encryption non-deterministic. Although nonce for each encryption is not secret, nonce among different encryption must be different in order for attackers to get harder to guess plain-text.

(*3) Random number generator.

Serializer

Crate users can choose and even implement by themselves serialize representations in design.

Currently, the following serializers are built-in.

  • BincodeSerializer (only std feature)
    • Best choice for std to reduce message size in most cases.
  • PostcardSerializer
    • Best choice for no_std to reduce message size in most cases.
  • CborSerializer
    • Has large message size but deals with complex serde types. See Encrypts/Decrypts complex serde types example to check kind of serde types only CborSerializer can serialize.
    • Single available choice in serde-encrypt-sgx.
      • Both bincode and postcard crates cannot compile with Rust SGX SDK

Use cases

  • SerdeEncryptSharedKey
    • Both message sender and receiver already hold shared key.
    • Needs shared-key exchange via any safe way but wants high-speed encryption/decryption (e.g. communicates large amounts of messages).
  • SerdeEncryptSharedKeyDeterministic
    • Only when you need deterministic encryption for equal-matching in cipher-text.
    • Note that this is more vulnerable than SerdeEncryptSharedKey because, for example, attackers can find repeated patterns in cipher-text and then guess repeated patterns in plain-text.
  • SerdeEncryptPublicKey
    • To exchange SharedKey.
    • Quickly sends/receive small amounts of messages without secret shared key.

Rust SGX SDK support

Use serde-encrypt-sgx crate.

Feature flags

  • std (serde-encrypt [default] ; serde-encrypt-core [default])
    • std::error::Error trait implementation to serde_encrypt::Error.
    • Random number generator is created via SeedableRng::from_entropy(), which is considered to be more secure in OS-available environments.
    • BincodeSerializer available.

Implementation

Crates

serde-encrypt is a cargo workspace project and two crates are inside:

  • serde-encrypt-core
    • Encryption / Decryption implementations.
    • Traits for serialization / deserialization.
    • Traits for RNG (Random Number Generator) singleton.
  • serde-encrypt (depends on serde-encrypt-core)
    • Serialization / Deserialization impls.
    • RNG singleton impls.

serde-encrypt-sgx crate is also available in separate repository. It's in the same layer as serde-encrypt.

In order to use serde with Rust SGX SDK, people should use forked version serde-sgx. Also, Rust SGX SDK compiles with only old version of rustc (nightly-2020-10-25, currently), even simple no_std crate cannot build sometimes (e.g. spin crate cannot).

It is another choice to make serde-encrypt-sgx inside this repository using feature flags but it breaks cargo build --all-features in latest rustc.

Encryption

crypto_box crate is used both for public-key encryption and shared-key encryption.

Pure Rust implementation of the crypto_box public-key authenticated encryption scheme from NaCl-family libraries (e.g. libsodium, TweetNaCl) which combines the X25519 Diffie-Hellman function and the XSalsa20Poly1305 authenticated encryption cipher into an Elliptic Curve Integrated Encryption Scheme (ECIES).

Serialization

structs and enums to encrypt are serialized before encrypted. Built-in serializers are listed here.

Users can also implement TypedSerialized trait by themselves to get better serialization.

Changelog

See CHANGELOG.md.

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in serde-encrypt by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Comments
  • Change SharedKey  from `private` to `pub`

    Change SharedKey from `private` to `pub`

    Related compile error:

    error[E0423]: cannot initialize a tuple struct which contains private fields
      --> src/main.rs:94:34
       |
    94 |     const SHAREDKEY: SharedKey = SharedKey([0u8; 32]);
    

    by default, tuple like struct is private and cannot be automatically built from static array [u8; 32]

    Also, add test casees and alter the readme to suit the changes.

    opened by kurikomoe 5
  • build(deps): update crypto_box requirement from 0.6 to 0.7

    build(deps): update crypto_box requirement from 0.6 to 0.7

    Updates the requirements on crypto_box 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 
    opened by dependabot[bot] 2
  • list encryption types

    list encryption types

    • public-key authenticated encryption: https://doc.libsodium.org/public-key_cryptography/authenticated_encryption

      • features:
        • safe key exchange (only privkey holder can decrypt) (X25519)
        • message authentication (just assure client holds the pair privkey and the message is encrypted by the privkey; not assure who is client) (by Poly1305)
        • everytime different cipher text (by nonce)
        • ~~both client/server privkeys are either ephemeral or static (static e.g. enclave key)~~
          • true for every encryption using keys
      • use cases:
        • shared-key exchange
          • clients don't have to persist the key if the server does
        • low throughput requirement
    • shared-key authenticated encryption: https://libsodium.gitbook.io/doc/secret-key_cryptography/secretbox

      • features:
        • message authentication (just assure client holds the pair privkey and the message is encrypted by the privkey; not assure who is client) (by Poly1305)
        • everytime different cipher text (by nonce)
        • ~~shared key must be static to decrypt old messages~~
      • use cases:
        • fast encryption
        • small key size (microcontroller) for the same security bits
    opened by laysakura 2
  • build(deps): update pretty_assertions requirement from 0.7 to 1.0

    build(deps): update pretty_assertions requirement from 0.7 to 1.0

    Updates the requirements on pretty_assertions to permit the latest version.

    Release notes

    Sourced from pretty_assertions's releases.

    v1.0.0

    Note: As pretty_assertions has in practice had a stable API for several years, this feature release takes the opportunity to increment the version to 1.0.0 instead of 0.8.0. No breaking changes are expected.

    Removed

    • assert_ne no longer warns if values match using PartialEq but not with Debug. This was noted as no longer being necessary after Rust 1.25 (current MSRV 1.35.0)

    Added

    • Officially support no_std (thanks to @​Luro02 for the report and reviews!). Adds the std and alloc features to the pretty_assertions crate, with std enabled by default (#83, @​tommilligan)
    • Adds the unstable feature to the pretty_assertions crate, for use with nightly rustc (#81, @​tommilligan)
    • Add a drop in replacement for the unstable stdlib assert_matches macro, behind the unstable flag - thanks @​gilescope for the suggestion! (#81, @​tommilligan)
    Changelog

    Sourced from pretty_assertions's changelog.

    v1.0.0

    Removed

    • assert_ne no longer warns if values match using PartialEq but not with Debug. This was noted as no longer being necessary after Rust 1.25 (current MSRV 1.35.0)

    Added

    • Officially support no_std (thanks to @​Luro02 for the report and reviews!). Adds the std and alloc features to the pretty_assertions crate, with std enabled by default (#83, @​tommilligan)
    • Adds the unstable feature to the pretty_assertions crate, for use with nightly rustc (#81, @​tommilligan)
    • Add a drop in replacement for the unstable stdlib assert_matches macro, behind the unstable flag - thanks @​gilescope for the suggestion! (#81, @​tommilligan)

    v0.7.2

    v0.7.1

    • Fix a bug where multiline changes showed an unhelpful inline diff (#66, @​tommilligan)

    v0.7.0

    Changed

    • Move from difference to diff for calculating diffs. The exact assertion messages generated may differ from previous versions. (#52, @​tommilligan)

    For example, the following assertion message from v0.7.0:

    pretty assertion

    Was previously rendered like this in v0.6.1:

    pretty assertion

    Added

    • Support for unsized values (#42, @​stanislav-tkach)
    • Document the Comparison struct, which was previously hidden. This can be used to generate a pretty diff of two values without panicking. (#52, @​tommilligan)

    Fixed

    Internal

    Commits
    • 737c861 Merge pull request #83 from tommilligan/assert-eq-no-std
    • 659b66b chore: prepare for v1.0.0 release
    • 0a32464 feat: fix and test for no_std with alloc
    • 9ef3e0d Merge pull request #81 from tommilligan/assert-matches
    • d084599 chore: update tarpaulin version
    • 799d2b2 feature: add assert_matches as unstable feature
    • 55f9b7a Merge pull request #78 from tommilligan/test-macro-integrate
    • c45600c chore: make macro tests external
    • 9746ead Merge pull request #77 from tommilligan/fix-bench-std
    • a9ba6c2 bench: fix std comparison benchmarks
    • Additional commits viewable in compare view

    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 
    opened by dependabot[bot] 1
  • docs: Replace `he or she` for `they`

    docs: Replace `he or she` for `they`

    English already has a gender neutral pronoun, they, so using they instead of he or she is more accurate and more inclusive, as not all people identify as he or she.

    opened by naomijub 1
  • "X25513": typo in README?

    serde-encrypt supports both shared-key encryption (XChaCha20-Poly1305) and public-key encryption (XChaCha20-Poly1305 with X25513 key-exchange)

    X25513

    Is it something new or just mistyped "X25519"?

    opened by vi 1
  • How to tag only certain fields of a struct as encrypted?

    How to tag only certain fields of a struct as encrypted?

    In such a common scenario as outlined below I only want to store the password as encrypted value. How can I achieve that?

    struct DatabaseConfig {
      hostname: String,
      user: String,
      password: String
    }
    
    opened by gitmalong 1
  • build(deps): update crypto_box requirement from 0.6 to 0.8

    build(deps): update crypto_box requirement from 0.6 to 0.8

    Updates the requirements on crypto_box 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 
    opened by dependabot[bot] 0
  • build(deps): update postcard requirement from 0.7 to 1.0

    build(deps): update postcard requirement from 0.7 to 1.0

    Updates the requirements on postcard to permit the latest version.

    Changelog

    Sourced from postcard's changelog.

    1.0.0 -> Unreleased

    • Nothing, yet!

    1.0.0-alpha.4 -> 1.0.0

    • Added experimental derive features
    • Made Flavor fields private again
    • Optimized varint encoding
    • Use crate Result for Flavors

    1.0.0-alpha.3 -> 1.0.0-alpha.4

    • Updated the signature of deserialization Flavor trait
    • Added documentation and tests
    • Removed the Encoder wrapper type to better match serialization and deserialization types
    • Renamed ser_flavor::Flavor::release to finalize for consistency
    • Re-organized some public items and modules
    • Made Error non-exhaustive
    • Added a fixint type to avoid varints

    1.0.0-alpha.2 -> 1.0.0-alpha.3

    • Moved back to cobs from postcard-cobs
      • This fixed a number of upstream issues, including removal of panicking branches
    • Improved documentation and code examples
    • Corrected the behavior of take_from_cobs
    • Added support for serializing Debug/Display representation strings via serde's collect_str method (and removed the panic)

    1.0.0-alpha.1 -> 1.0.0-alpha.2

    • Re-exposed fields of the Flavor constructors, made various flavors impl Default
    • No breaking changes vs 1.0.0-alpha.1.

    0.7.3 -> 1.0.0-alpha.1

    • WARNING: This includes a BREAKING wire change from postcard v0.x.y! Please ensure all devices using postcard are recompiled with the newest version!
    • added #[inline] to many functions, increasing performance
    • All unsigned integers u16-u128 are varint encoded
    • All signed integers i16-i128 are zigzag + varint encoded
    • Serialization flavors have been tweaked slightly, with the Slice flavor now faster
    • Introduction of Deserialization flavors
    • Please report any bugs upstream as we prepare for the v1.0.0 release!

    0.7.2 -> 0.7.3

    • Added optional defmt support with the use-defmt feature.
    • Improved docs

    ... (truncated)

    Commits
    • 08e38e6 Final touches. v1.0.0
    • b6bb55e Prepare postcard-derive for release
    • afabae7 Pre-release
    • 49fb719 Prepare derive features for experimental release
    • 17c4c13 Merge remote-tracking branch 'lachlan/derive'
    • 2edf154 Optimize Varint encoding (#60)
    • ce5ee88 Add changelog from alpha.4, fix typo
    • 3fa75d0 Last alpha release
    • b06a4c4 Improve docs
    • 20a923e Big cargo fmt, and rework flavors to be more consistent
    • Additional commits viewable in compare view

    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 
    opened by dependabot[bot] 1
  • build: bump up MSVR for const generics

    build: bump up MSVR for const generics

    error[E0658]: const generics are unstable
      --> /home/runner/.cargo/registry/src/github.com-1ecc6299db9ec823/postcard-0.7.3/src/accumulator.rs:65:34
       |
    65 | pub struct CobsAccumulator<const N: usize> {
       |                                  ^
       |
       = note: see issue #74878 <https://github.com/rust-lang/rust/issues/74878> for more information
    
    error[E0658]: const generics are unstable
      --> /home/runner/.cargo/registry/src/github.com-1ecc6299db9ec823/postcard-0.7.3/src/accumulator.rs:93:12
       |
    93 | impl<const N: usize> CobsAccumulator<N> {
       |            ^
       |
       = note: see issue #[74](https://github.com/laysakura/serde-encrypt/runs/5999148894?check_suite_focus=true#step:9:74)8[78](https://github.com/laysakura/serde-encrypt/runs/5999148894?check_suite_focus=true#step:9:78) <https://github.com/rust-lang/rust/issues/74878> for more information
    
       Compiling serde_cbor v0.11.2
    error: aborting due to 2 previous errors
    
    opened by laysakura 0
  • build(deps): update chacha20poly1305 requirement from 0.8 to 0.9

    build(deps): update chacha20poly1305 requirement from 0.8 to 0.9

    Updates the requirements on chacha20poly1305 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 
    opened by dependabot[bot] 0
  • Random nonces are not secure

    Random nonces are not secure

    Via https://github.com/laysakura/serde-encrypt/blob/9ba98fa857464e2e75c017407c0a1345d697b896/src/traits/serde_encrypt_public_key.rs#L60

    While the probability can be astronomically low given a large enough nonce, the probability that a nonce will be reused still exists when it is random. Reusing a nonce under ciphers like ChaCha20-Poly1305 or AES-GCM effectively means revealing the encryption secret to an attacker that can observe both of the messages encrypted with the same nonce.

    It's for that reason that protocols like TLS use sequential nonces and require implementations to change secrets when the sequence is about to overflow. The point is to guarantee that a reused nonce will never be observed.

    Due to the nature of this library and lack of control over how and how many objects get serialized-and-encrypted, nor how they are transported or stored, it effectively means that this library is currently not secure.

    I wanted to raise this issue to raise awareness - but do not see an easy fix given the current API, considering maintaining a sequence requires maintaining additional state on a per-key basis and defeats the convenience-centric aim of this library.

    new feature security 
    opened by alcore 1
Owner
Sho Nakatani
A low-level system developer / backend engineer in Tokyo.
Sho Nakatani
Decrypts/encrypts Judgment and Lost Judgment PC chara.par archives

yagami-decryption-agency Decrypts/encrypts Judgment and Lost Judgment PC chara.par archives Installation Download the latest release. Usage USAGE:

null 3 Dec 1, 2022
A CLI application which allows you to archive Urbit channels and all linked content in them.

The Urbit Content Archiver is a small CLI application that exports channels from your Urbit ship and auto-downloads any directly linked content locall

Robert Kornacki 33 Sep 25, 2022
All the data an IC app needs to make seamless experiences, accessible directly on the IC. DAB is an open internet service for NFT, Token, Canister, and Dapp registries.

DAB ?? Overview An Internet Computer open internet service for data. All the data an IC app needs to make a seamless experience, accessible directly o

Psychedelic 58 Oct 6, 2022
Bitcoin Push Notification Service (BPNS) allows you to receive notifications of Bitcoin transactions of your non-custodial wallets on a provider of your choice, all while respecting your privacy

Bitcoin Push Notification Service (BPNS) Description Bitcoin Push Notification Service (BPNS) allows you to receive notifications of Bitcoin transacti

BPNS 1 May 2, 2022
A template to build smart contracts in Rust to run inside a Cosmos SDK module on all chains that enable it.

CosmWasm Starter Pack This is a template to build smart contracts in Rust to run inside a Cosmos SDK module on all chains that enable it. To understan

null 1 Mar 7, 2022
Smart Contract built in Rust to run inside Cosmos SDK module on all chains that enable it

CoinSwap is a Smart Contract that is built on the terra blockchain and can be used to swap cryptocurrencies such as LUNA, UST, TerraUSD, Anchor, Mirror Protocol, LUNI and other CW20 tokens. The Project also contains a smart contract which works as a analysis tool for the gas fees on the Terra Blockchain.

Prajjwal Chittori 9 Oct 11, 2022
Reference library that implements all the necessary functionality for developing a client that is compatible with TAPLE's DLT network.

⚠️ TAPLE is in early development and should not be used in production ⚠️ TAPLE Core TAPLE (pronounced T+ ?? ['tapəl]) stands for Tracking (Autonomous)

Open Canarias 6 Jan 25, 2023
An all-in-one IBC protocol providing fungible token transfer, interchain account, and async query functionalities

ICS-999 An all-in-one IBC protocol providing fungible token transfer, interchain account (ICA), and query (ICQ) functionalities, implemented in CosmWa

larry 9 Apr 1, 2023
Customisable CLI agents to answer all your quick questions. ⚙️

Agent Smith ??️‍♂️ Your ally in the battle for mental space between you and the multiverse of CLI tools. ?? Setup OpenAI API Token You need to set the

Lef Filippakis 3 May 3, 2023
A monorepo containing all the custom components of the Astria network

A monorepo containing all the custom components of the Astria network, a decentralized system that replaces traditional sequencers, offering a shared, permissionless sequencer network.

Astria 6 Jun 7, 2023
reth-indexer reads directly from the reth db and indexes the data into a postgres database all decoded with a simple config file and no extra setup alongside exposing a API ready to query the data.

reth-indexer reth-indexer reads directly from the reth db and indexes the data into a postgres database all decoded with a simple config file and no e

Josh Stevens 306 Jul 12, 2023
A Minimalistic Rust library to extract all potential function selectors from EVM bytecode without source code.

EVM Hound A Minimalistic Rust library to extract all potential function selectors from EVM bytecode without source code. Installation $ cargo add evm_

null 34 Dec 3, 2023
Turnstile encrypts data so that it can only be decrypted on another computer

Turnstile - One Way Encryption Turnstile encrypts data so that it can only be decrypted on another computer (and can't be decrypted on the encrypting

Faded Bee 4 May 6, 2022
Decrypts/encrypts Judgment and Lost Judgment PC chara.par archives

yagami-decryption-agency Decrypts/encrypts Judgment and Lost Judgment PC chara.par archives Installation Download the latest release. Usage USAGE:

null 3 Dec 1, 2022
Serialize/DeSerialize for Rust built-in types and user defined types (complex struct types)

Serialize/DeSerialize for Rust built-in types and user defined types (complex struct types)

null 2 May 3, 2022
Serialize & deserialize device tree binary using serde

serde_device_tree Use serde framework to deserialize Device Tree Blob binary files; no_std compatible. Use this library Run example: cargo run --examp

Luo Jia 20 Aug 20, 2022
A tool to deserialize data from an input encoding, transform it and serialize it back into an output encoding.

dts A simple tool to deserialize data from an input encoding, transform it and serialize it back into an output encoding. Requires rust >= 1.56.0. Ins

null 11 Dec 14, 2022
Serialize/Deserialize tch-rs types with serde

tch-serde: Serialize/Deserialize tch-rs types with serde This crate provides {ser,de}ialization methods for tch-rs common types. docs.rs | crates.io U

null 4 Apr 3, 2022
Macro for fast implementing serialize methods in serde::Serializer trait

impl_serialize! This library provides a simple procedural macro for fast implementing serialize methods in serde::Serializer trait. [dependencies] imp

Eduard Baturin 2 Sep 6, 2022
Macros for redis-rs to serialize and deserialize structs automatically

redis-macros Simple macros and wrappers to redis-rs to automatically serialize and deserialize structs with serde. Installation To install it, simply

Daniel Grant 4 Feb 18, 2023