Skip to main content

Least-Authority File Store utils

Project description

LAFS

LAFS is an experimental Rust crate that provides a limited implementation of some parts of Tahoe-LAFS -- the Least-Authority File Store. More specifically, it offers Rust implementations of the following functions (from the original Python allmydata package):

allmydata.util.base32.b2a
allmydata.util.hashutil.tagged_hash
allmydata.util.hashutil.ssk_pubkey_fingerprint_hash
allmydata.util.hashutil.ssk_writekey_hash
allmydata.util.netstring.netstring

Taken together, these provide just enough functionality to derive valid mutable capability strings/URIs that are fully compatible with the original (Python) implementation (as confirmed by testing against Tahoe-LAFS' own test vectors). As such, this library can be used to generate or recover cryptographic capabilities completely "offline" (i.e., without the need to interact with a running Tahoe-LAFS node) and/or in environments -- such as mobile -- where running a full tahoe node may be infeasible or undesirable.

Usage

Although Tahoe-LAFS does not provide a Python API, for the sake of consistency with the original implementation, paths exposed by this crate strive to match the namespaces defined in the original allmydata Python package. For example, the Python allmydata.util.base32.b2a function can be called via the lafs::util::base32::b2a path in Rust.

Function signatures and types, likewise, aim to follow the original implementation as closely as possible (thus a Python function that returns a bytes of undefined length might return a Vec<u8> in Rust), however, given Python's dynamic type system and other fundamental language differences (like Python's exception system, "default" args., etc.), some concessions should be expected. When in doubt, consult the source code.

Python bindings

In addition to the Rust crate, Python bindings are provided for each of the modules/functions defined by this library (using pyo3, however, due to the aforementioned essential language differences (as well as some outstanding issues with pyo3 submodule imports), these should not be considered as suitable "drop-in" replacements for those defined by the allmydata Python package; these bindings are used mainly to support testing against the original implementation. (See the test/ directory for examples.)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lafs-0.0.3.tar.gz (342.1 kB view hashes)

Uploaded Source

Built Distributions

lafs-0.0.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (255.2 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

lafs-0.0.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (297.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

lafs-0.0.3-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (293.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

lafs-0.0.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (262.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

lafs-0.0.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (261.4 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

lafs-0.0.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl (270.1 kB view hashes)

Uploaded PyPy manylinux: glibc 2.5+ i686

lafs-0.0.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (255.1 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

lafs-0.0.3-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl (297.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ s390x

lafs-0.0.3-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (294.2 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ppc64le

lafs-0.0.3-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (262.8 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARMv7l

lafs-0.0.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (261.1 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

lafs-0.0.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl (269.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.5+ i686

lafs-0.0.3-cp312-none-win_amd64.whl (125.6 kB view hashes)

Uploaded CPython 3.12 Windows x86-64

lafs-0.0.3-cp312-none-win32.whl (119.7 kB view hashes)

Uploaded CPython 3.12 Windows x86

lafs-0.0.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.8 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

lafs-0.0.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (295.5 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

lafs-0.0.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (292.6 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

lafs-0.0.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (262.2 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARMv7l

lafs-0.0.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (259.8 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

lafs-0.0.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl (268.7 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.5+ i686

lafs-0.0.3-cp312-cp312-macosx_11_0_arm64.whl (217.6 kB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

lafs-0.0.3-cp312-cp312-macosx_10_12_x86_64.whl (224.3 kB view hashes)

Uploaded CPython 3.12 macOS 10.12+ x86-64

lafs-0.0.3-cp311-none-win_amd64.whl (125.7 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

lafs-0.0.3-cp311-none-win32.whl (119.8 kB view hashes)

Uploaded CPython 3.11 Windows x86

lafs-0.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (253.7 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

lafs-0.0.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (296.3 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

lafs-0.0.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (293.2 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

lafs-0.0.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (262.3 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARMv7l

lafs-0.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (260.0 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

lafs-0.0.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl (269.2 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.5+ i686

lafs-0.0.3-cp311-cp311-macosx_11_0_arm64.whl (217.5 kB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

lafs-0.0.3-cp311-cp311-macosx_10_12_x86_64.whl (225.0 kB view hashes)

Uploaded CPython 3.11 macOS 10.12+ x86-64

lafs-0.0.3-cp310-none-win_amd64.whl (125.8 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

lafs-0.0.3-cp310-none-win32.whl (119.9 kB view hashes)

Uploaded CPython 3.10 Windows x86

lafs-0.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (254.0 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

lafs-0.0.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (296.9 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

lafs-0.0.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (293.2 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

lafs-0.0.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (262.4 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARMv7l

lafs-0.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (260.1 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

lafs-0.0.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl (269.3 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.5+ i686

lafs-0.0.3-cp310-cp310-macosx_11_0_arm64.whl (217.8 kB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

lafs-0.0.3-cp310-cp310-macosx_10_12_x86_64.whl (225.2 kB view hashes)

Uploaded CPython 3.10 macOS 10.12+ x86-64

lafs-0.0.3-cp39-none-win_amd64.whl (126.1 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

lafs-0.0.3-cp39-none-win32.whl (120.1 kB view hashes)

Uploaded CPython 3.9 Windows x86

lafs-0.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (254.2 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

lafs-0.0.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (296.9 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

lafs-0.0.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (293.1 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

lafs-0.0.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (262.5 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARMv7l

lafs-0.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (260.6 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

lafs-0.0.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl (269.3 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.5+ i686

lafs-0.0.3-cp39-cp39-macosx_11_0_arm64.whl (218.2 kB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

lafs-0.0.3-cp39-cp39-macosx_10_12_x86_64.whl (225.5 kB view hashes)

Uploaded CPython 3.9 macOS 10.12+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page