An HTTP proxy for assets (mainly images) to route requests through an always-encrypted connection.

Related tags

Cryptography rust camo
Overview

camo-rs

camo-rs is a frontend-compatible Rust-re-implementation of the now archived NodeJS-based atmos/camo - an HTTP proxy for assets (mainly images) to route requests through an always-encrypted connection.

While initially designed for use in diaspora*, asset proxies like this are useful for all applications that display, for example, image files from external sources based on user input and want to avoid mixed-content warnings and reduce the number of external hosts the end-user has to connect to.

Note that this project is not considered production-ready yet. A version 1.0.0 release will follow after further testing in experimental setups.

URL format

To prevent abuse, only authorized URLs can be proxied through Camo. URLs requested from the application need to have the following format:

https://camo.example.org/<digest>/<asset-url>

Where

  • the digest is a 40-character hexadecimal-encoded SHA1 HMAC digest computed with the shared secret key,
  • the asset-url is a hexadecimal representation of the target URL, for example 687474703a2f2f65786d61706c652e636f6d2f6578616d706c652e6a7067 for http://exmaple.com/example.jpg.

Differences to the original project

There are some differences to the original projects, namely:

  • passing the image-url via a query parameter is not supported.
  • camo-rs will not follow redirects. Instead, if a redirect is encountered upstream, the redirect response will be passed to the client, but with the location header modified to show a Camo-proxied version of the original location. This allows clients (and server-side logic) to cache permanent redirects.
  • In addition to GET requests, camo-rs also accepts HEAD and OPTIONS requests and passes them through accordingly. This is useful if you want to verify the availability of URLs through Camo on the server side, or if CORS is relevant.

Security considerations

Camo allows users to proxy essentially arbitrary files through it. If your application is vulnerable, Camo could be used to bypass cross-origin boundaries for assets. To reduce the risk a bit, camo-rs will always set the following headers in all of its proxied responses:

  • content-security-policy: default-src 'none'; img-src data:; style-src 'unsafe-inline'
  • x-content-type-options: nosniff
  • x-frame-options: deny
  • x-xss-protection: 1; mode=block

Which will reduce the amount of things you can do with the proxied resources significantly. In addition, camo-rs filters responses by content-type. Administrators can set flags to allow audio/*, image/*, and video/* MIME types in the config. Other content types will be rejected. camo-rs will reject to proxy resources without a content-type headers set. While providing this header is not required by the spec, real-world observations show that the vast majority of servers do, at least for static files, correctly set the content-type header.

Changes to request and response headers

In addition to the security-relevant response header changes mentioned above, Camo will make some additional changes to the headers:

  • Requests to the upstream will always have the user-agent and via headers set to the configured value.
  • Responses will, in addition to the headers from the upstream, always have a x-camo-original-url header, showing the original URL without any encoding.

Configuration

Configuration can be done via environment variables and CLI flags. The available configuration can be listed by running Camo with --help, but they're also documented at /docs/configuration.md.

Installation and Usage

Please see the additional documentation in the docs folder for details on

License

MIT. This projects takes heavy inspiration from atmos/camo, which also was licensed under the MIT license.

Comments
  • Add an option to disable ANSI color codes in logging output

    Add an option to disable ANSI color codes in logging output

    At the moment the logging always logs with ANSI color codes to format the logs. That's fancy if you have a terminal that can show colors, but it makes the logs extremely hard to read if you run it as a service and just log the output.

    So it would be useful to have an option to only log plain text without ANSI codes. Bonus points for an option to log as JSON instead.

    ✨ enhancement 
    opened by SuperTux88 4
  • Bump reqwest from 0.11.11 to 0.11.12

    Bump reqwest from 0.11.11 to 0.11.12

    Bumps reqwest from 0.11.11 to 0.11.12.

    Release notes

    Sourced from reqwest's releases.

    v0.11.12

    What's Changed

    • Add ClientBuilder::resolve_to_addrs() which allows a slice of IP addresses to be specified for a single host.
    • Add Response::upgrade() to await whether the server agrees to an HTTP upgrade.

    New Contributors ❤️

    Changelog

    Sourced from reqwest's changelog.

    v0.11.12

    • Add ClientBuilder::resolve_to_addrs() which allows a slice of IP addresses to be specified for a single host.
    • Add Response::upgrade() to await whether the server agrees to an HTTP upgrade.
    Commits

    Dependabot compatibility score

    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] 1
  • Bump thiserror from 1.0.35 to 1.0.36

    Bump thiserror from 1.0.35 to 1.0.36

    Bumps thiserror from 1.0.35 to 1.0.36.

    Release notes

    Sourced from thiserror's releases.

    1.0.36

    Commits
    • 7b226e3 Release 1.0.36
    • f062061 Copy docs on struct error(transparent) into readme
    • 5271eb3 Touch up PR 195
    • 8e8e41d Merge pull request #195 from matklad/error-transparent
    • c79b023 Update ui test suite to nightly-2022-09-25
    • 765cd2a document that error(transparent) works with structs
    • b37dc36 Raise minimum tested toolchain to rust 1.56
    • 31dfd4c Remove default package.readme metadata from Cargo.toml
    • See full diff in compare view

    Dependabot compatibility score

    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] 1
  • Bump url from 2.3.0 to 2.3.1

    Bump url from 2.3.0 to 2.3.1

    Bumps url from 2.3.0 to 2.3.1.

    Commits
    • 359bc90 Merge pull request #792 from servo/version_bump_2.3.1
    • ad8911a Bump url version to 2.3.1 and bump minor for dependencies
    • See full diff in compare view

    Dependabot compatibility score

    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] 1
  • Bump clap from 3.2.20 to 3.2.22

    Bump clap from 3.2.20 to 3.2.22

    Bumps clap from 3.2.20 to 3.2.22.

    Release notes

    Sourced from clap's releases.

    v3.2.22

    [3.2.22] - 2022-09-16

    Fixes

    • Unify dependencies on terminal_size to the 0.2 release

    v3.2.21

    [3.2.21] - 2022-09-12

    Features

    • TypedValueParser::map to allow reusing existing value parsers for other purposes
    Changelog

    Sourced from clap's changelog.

    [3.2.22] - 2022-09-16

    Fixes

    • Unify dependencies on terminal_size to the 0.2 release

    [3.2.21] - 2022-09-12

    Features

    • TypedValueParser::map to allow reusing existing value parsers for other purposes
    Commits
    • 9e3fa67 chore: Release
    • d188de0 docs: Update changelog
    • 48b2373 Merge pull request #4221 from niyaznigmatullin/bump_terminal_size
    • 2fd5507 chore(deps): Bump terminal_size and textwrap
    • 7de2f36 chore: Release
    • af47562 docs: Roll back deprecation message
    • 1f053b9 Merge pull request #4205 from epage/deprecations
    • d1ff063 Merge pull request #4204 from epage/map
    • 7272aa0 docs: Expand on deprecation instructions
    • 960c152 feat(parser): TypedValueParseer::map for adapting value parsers
    • Additional commits viewable in compare view

    Dependabot compatibility score

    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] 1
  • Bump thiserror from 1.0.34 to 1.0.35

    Bump thiserror from 1.0.34 to 1.0.35

    Bumps thiserror from 1.0.34 to 1.0.35.

    Release notes

    Sourced from thiserror's releases.

    1.0.35

    • More work on integrating std::any::Provider for backtrace support
    • Fix "Multiple applicable provide methods in scope" error when the caller has both std::error::Error and std::any::Provide traits in scope (#185)
    Commits
    • 10ffe03 Release 1.0.35
    • 9be0f41 Merge pull request #191 from dtolnay/anyhowprovider
    • 1a90b77 Pull in Provider impl from anyhow 1.0.65
    • 2ca76ed Merge pull request #190 from dtolnay/provider
    • 01e7c18 Temporarily disable AnyhowBacktrace test
    • aaf8449 Use ThiserrorProvide to disambiguate 'provide' method calls
    • 460396e Add trait with method that won't collide between Provider and Error
    • 293b127 Add build script to detect Provider support
    • 3bcad59 Revert "Directly call source.provide instead of going through dyn error"
    • 21198c9 Move multiple-provide test into test_backtrace
    • Additional commits viewable in compare view

    Dependabot compatibility score

    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] 1
  • Bump tokio from 1.21.0 to 1.21.1

    Bump tokio from 1.21.0 to 1.21.1

    Bumps tokio from 1.21.0 to 1.21.1.

    Release notes

    Sourced from tokio's releases.

    Tokio v1.21.1

    1.21.1 (September 13, 2022)

    Fixed

    • net: fix dependency resolution for socket2 (#5000)
    • task: ignore failure to set TLS in LocalSet Drop (#4976)

    #4976: tokio-rs/tokio#4976 #5000: tokio-rs/tokio#5000

    Commits

    Dependabot compatibility score

    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] 1
  • Add documentation to show a default `ALLOW_*` field

    Add documentation to show a default `ALLOW_*` field

    If no CAMO_ALLOW_* settings are set, Camo will reject everything. I should probably add CAMO_ALLOW_IMAGE=true to the example configs, just so that people don't get confused.

    📚 documentation 
    opened by denschub 1
  • Docker Build seems to be unaware of its Git hash

    Docker Build seems to be unaware of its Git hash

    I thought I fixed that with https://github.com/denschub/camo-rs/commit/fb4afb95299fa61a24d747afd73a4cb63845938a, but the version string is still 1.0.0-dev (unknown). The binary build, however, correctly shows 1.0.0-dev (fb4afb9), so this sounds like the Docker build step isn't copy'ing the Git repo?!

    🐞 bug 
    opened by denschub 1
  • Bump url from 2.2.2 to 2.3.0

    Bump url from 2.2.2 to 2.3.0

    Bumps url from 2.2.2 to 2.3.0.

    Commits
    • 35abc32 Merge pull request #791 from servo/ver_2.3.0
    • 25266fc Bump url version to 2.3.0
    • 587e962 Merge pull request #790 from crowlKats/remove_idna
    • eaa23e5 remove IDNA feature
    • a3df365 feat(url): add quirks::internal_components (#788)
    • 868719d Merge pull request #734 from andrewbanchich/fix-set-host
    • eb3f20d Fix setting file hosts to None
    • 6e5df8f perf(idna): fast-path simple/ascii domains (#761)
    • 1d307ae Merge pull request #787 from jiftoo/query-pairs-patch
    • 4c5e4ee fix unclosed doctest
    • Additional commits viewable in compare view

    Dependabot compatibility score

    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] 0
  • Bump axum from 0.6.0-rc.1 to 0.6.0-rc.2

    Bump axum from 0.6.0-rc.1 to 0.6.0-rc.2

    Bumps axum from 0.6.0-rc.1 to 0.6.0-rc.2.

    Commits

    Dependabot compatibility score

    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] 0
  • Improvements to the release process for v1.0.0

    Improvements to the release process for v1.0.0

    There are a couple of things I could improve.

    • [ ] The binary inside the archive doesn't have the executable flag set. This is due to an issue in the upload-artifact action, but this can be worked around by building a tar/zip manually and uploading that.
    • [ ] Instead of camo-linux-amd64.zip, it probably makes sense to add the version number to the archive, something like camo-v0.3.0-linux-amd64.zip so it's clear when linking to it.
    • [ ] For releasing, I currently have to wait until the build job for the release branch is done, then downloading the artifacts, drafting a release, and attaching the artifacts there. In theory, I could run GHA when a new tag is created, build release artifacts, and automatically create a new draft release with the artifacts attached. The matrix-org/synapse repo has something close to that where I could probably take inspiration from.

    Optionally, some other things:

    • [ ] The docker-release workflow currently doesn't care about the "pre-release" checkbox in a release, and would tag even pre-releases to latest. This probably isn't a big deal since I don't plan on releasing pre-releases, but it might be worth adjusting that, and only push a tag 1.0.0-dev, instead of pushing it to 1, 1.0, 1.0.0-dev, and latest.
    • [ ] I currently push container images to Docker Hub, but there's no reason not to push it towards the GitHub Container Registry as well.
    ✨ enhancement 
    opened by denschub 0
Releases(v0.3.0)
  • v0.3.0(Sep 12, 2022)

  • v0.2.0(Sep 4, 2022)

    • camo-rs now refuses to start if no content-types are allowed. Before that, Camo would start up just fine, but reject everything, which can be confusing.
    • When receiving a status code outside the expected range ([200..399]), Camo will still reject that request, but will pass the upstream status code to the client.
    • Even with RUST_LOG=warn, the log will still contain the encoded digest, target, and - if available - the decoded and validated target URL. This makes debugging production setups easier.
    Source code(tar.gz)
    Source code(zip)
    camo-linux-amd64.zip(3.46 MB)
  • v0.1.0(Aug 29, 2022)

Owner
Dennis Schubert
firefox web compatibility at @mozilla. sometimes doing other stuff as well. for science, you monster. he/him/they/meow.
Dennis Schubert
a handy utility to work with encrypted DMGs

edmgutil edmgutil is a simple wrapper utility to hdiutil to help you work with disposable, encrypted DMGs. It can decompress an encrypted ZIP into a n

Sentry 9 Jan 11, 2022
Encrypted memories

Diary - Encrypted memories Diary is a TUI program written in Rust for GNU/Linux / *BSD / Android (It probably works on other platforms too, but who ca

Arun Sojan Parolikkal 42 Sep 16, 2022
An application for creating encrypted vaults for the GNOME desktop.

Vaults An application for creating encrypted vaults for the GNOME desktop. It currently uses gocryptfs and CryFS for encryption. Please always keep a

Martin Pobaschnig 45 Sep 18, 2022
age-encrypted secrets for NixOS; drop-in replacement for agenix

ragenix ragenix provides age-encrypted secrets for NixOS systems which live in the Nix store and are decrypted on system activation. Using ragenix to

YAXI 80 Sep 23, 2022
Trustworthy encrypted command line authenticator app compatible with multiple backups.

cotp - command line totp authenticator I believe that security is of paramount importance, especially in this digital world. I created cotp because I

Reply 56 Sep 20, 2022
An encrypted multi client messaging system written in pure Rust

?? Preamble This is a pure Rust multi-client encrypted messaging system, also known as Edode's Secured Messaging System. It is an end-to-end(s) commun

Edode 3 Sep 16, 2022
Dione is an anonymize and encrypted messaging system build on top on a peer to peer layer.

Secure and Anonymous Messaging WARNING: Currently Dione is not ready to be used nor does it fulfill its goal of being an anonymous messenger. In order

Dione 40 Sep 28, 2022
NymDrive is a complete, end-to-end encrypted file syncing daemon that runs over the Nym network.

NymDrive NymDrive is a complete, end-to-end encrypted file syncing daemon that runs over the Nym network. Features Active file monitoring of changes i

Hans Bricks 16 Jul 12, 2022
An open source desktop wallet for nano and banano with end-to-end encrypted, on chain messaging using the dagchat protocol.

An open source wallet with end-to-end encrypted, on chain messaging for nano and banano using the dagchat protocol.

derfarctor 15 Jul 19, 2022
Smarter brute-force password searching for PKZIP encrypted files

Zip Blitz Motivation This program was created for a very specfic problem I had. I had a large encrypted zip file that I lost/forgot the password for.

Michael 4 Jul 29, 2022
nAssets are Nova Finance’s framework for building programmable assets.

nAssets are Nova Finance’s framework for building programmable assets. nAssets can be used to tokenize and store collective forms of value while also instructing assets to yield, exchange or rebalance.

Nova Finance 45 Dec 28, 2021
Helper library for interacting with Terra assets (SDK coins and CW20 tokens)

terra-asset Helpers for interacting with Terra assets, including native coins and CW20 tokens Usage This crate contains two struct types: AssetInfo st

larry 9 Jan 3, 2022
Tradechain is an open source blockchain designed for fast trading & interoperability for new, existing assets

Tradechain is an open source blockchain designed for fast trading & interoperability for new, existing assets. Help build the future of trading with other Tradians.

Matt Shaver 5 Jul 5, 2022
The implementation of the chain extension for `pallet-assets`

Pallet assets chain extension ⚠️ Chain extension contains vulnerabilities: Don't use it in the production. Fixing vulnerabilities requires changes on

Supercolony 2 Aug 22, 2022
Authenticate a tarball through a signed tag in a git repository (with reproducible builds)

auth-tarball-from-git Authenticate a tarball through a signed tag in a git repository (with reproducible builds). The signed git tag contains a hash o

null 14 Aug 16, 2022
Lightweight proxy that allows redirect HTTP(S) traffic through a proxy.

Proxyswarm Proxyswarm is a lightweight proxy that allows redirect HTTP(S) traffic through a proxy. WARNING: This app isn't recomended for download lar

Jorge Alejandro Jimenez Luna 4 Apr 16, 2022
Easy c̵̰͠r̵̛̠ö̴̪s̶̩̒s̵̭̀-t̶̲͝h̶̯̚r̵̺͐e̷̖̽ḁ̴̍d̶̖̔ ȓ̵͙ė̶͎ḟ̴͙e̸̖͛r̶̖͗ë̶̱́ṉ̵̒ĉ̷̥e̷͚̍ s̷̹͌h̷̲̉a̵̭͋r̷̫̊ḭ̵̊n̷̬͂g̵̦̃ f̶̻̊ơ̵̜ṟ̸̈́ R̵̞̋ù̵̺s̷̖̅ţ̸͗!̸̼͋

Rust S̵̓i̸̓n̵̉ I̴n̴f̶e̸r̵n̷a̴l mutability! Howdy, friendly Rust developer! Ever had a value get m̵̯̅ð̶͊v̴̮̾ê̴̼͘d away right under your nose just when

null 293 Sep 22, 2022
This crate implements fast route planning algorithms in Rust.

This crate implements fast route planning algorithms in Rust. Algorithms Currently implemented: Contraction Hierarchies: The implementat

Payas Rajan 4 Aug 15, 2021
JSON-RPC endpoint proxy that dumps requests/responses for debugging

json_rpc_snoop How to build Ensure you have cargo installed and in your PATH (the easiest way is to visit https://rustup.rs/) make This will create t

null 9 Apr 6, 2022
Single File Assets is a file storage format for images

SFA (Rust) Single File Assets is a file storage format for images. The packed images are not guaranteed to be of same format because the format while

null 1 Jan 23, 2022