Skip to main content

Python bindings for self-encryption library

Project description

self_encryption

Self encrypting files (convergent encryption plus obfuscation)

Crate Documentation
Documentation
MaidSafe website SAFE Dev Forum SAFE Network Forum

Table of Contents

Overview

A version of convergent encryption with an additional obfuscation step. This pattern allows secured data that can also be de-duplicated. This library presents an API that takes a set of bytes and returns a secret key derived from those bytes, and a set of encrypted chunks.

Important Security Note: While this library provides very secure encryption of the data, the returned secret key requires the same secure handling as would be necessary for any secret key.

image of self encryption

Documentation

Features

  • Content-based chunking
  • Convergent encryption
  • Self-validating chunks
  • Hierarchical data maps for handling large files
  • Streaming encryption/decryption
  • Python bindings
  • Flexible storage backend support
  • Custom storage backends via functors

Usage

Rust Usage

Installation

Add this to your Cargo.toml:

[dependencies]
self_encryption = "0.30"
bytes = "1.0"

Basic Operations

use self_encryption::{encrypt, decrypt_full_set};
use bytes::Bytes;

// Basic encryption/decryption
fn basic_example() -> Result<()> {
    let data = Bytes::from("Hello, World!".repeat(1000));  // Must be at least 3072 bytes
    
    // Encrypt data
    let (data_map, encrypted_chunks) = encrypt(data.clone())?;
    
    // Decrypt data
    let decrypted = decrypt_full_set(&data_map, &encrypted_chunks)?;
    assert_eq!(data, decrypted);
    
    Ok(())
}

Storage Backends

use self_encryption::{shrink_data_map, get_root_data_map, decrypt_from_storage};
use std::collections::HashMap;
use std::sync::{Arc, Mutex};

// Memory Storage Example
fn memory_storage_example() -> Result<()> {
    let storage = Arc::new(Mutex::new(HashMap::new()));
    
    // Store function
    let store = |hash, data| {
        storage.lock().unwrap().insert(hash, data);
        Ok(())
    };
    
    // Retrieve function
    let retrieve = |hash| {
        storage.lock().unwrap()
            .get(&hash)
            .cloned()
            .ok_or_else(|| Error::Generic("Chunk not found".into()))
    };
    
    // Use with data map operations
    let shrunk_map = shrink_data_map(data_map, store)?;
    let root_map = get_root_data_map(shrunk_map, retrieve)?;
    
    Ok(())
}

// Disk Storage Example
fn disk_storage_example() -> Result<()> {
    let chunk_dir = PathBuf::from("chunks");
    
    // Store function
    let store = |hash, data| {
        let path = chunk_dir.join(hex::encode(hash));
        std::fs::write(path, data)?;
        Ok(())
    };
    
    // Retrieve function
    let retrieve = |hash| {
        let path = chunk_dir.join(hex::encode(hash));
        Ok(Bytes::from(std::fs::read(path)?))
    };
    
    // Use with data map operations
    let shrunk_map = shrink_data_map(data_map, store)?;
    let root_map = get_root_data_map(shrunk_map, retrieve)?;
    
    Ok(())
}

Python Usage

Installation

pip install self-encryption

Basic Operations

from self_encryption import encrypt, decrypt

# Basic in-memory encryption/decryption
def basic_example():
    # Create test data (must be at least 3072 bytes)
    data = b"Hello, World!" * 1000
    
    # Encrypt data - returns data map and encrypted chunks
    data_map, chunks = encrypt(data)
    print(f"Data encrypted into {len(chunks)} chunks")
    print(f"Data map has child level: {data_map.child()}")
    
    # Decrypt data
    decrypted = decrypt(data_map, chunks)
    assert data == decrypted

File Operations

from pathlib import Path
from self_encryption import encrypt_from_file, decrypt_from_storage, streaming_encrypt_from_file

def file_example():
    # Setup paths
    input_path = Path("large_file.dat")
    chunk_dir = Path("chunks")
    output_path = Path("decrypted_file.dat")
    
    # Ensure chunk directory exists
    chunk_dir.mkdir(exist_ok=True)
    
    # Regular file encryption - stores all chunks at once
    data_map, chunk_names = encrypt_from_file(str(input_path), str(chunk_dir))
    print(f"File encrypted into {len(chunk_names)} chunks")
    
    # Streaming encryption - memory efficient for large files
    def store_chunk(name_hex: str, content: bytes) -> None:
        chunk_path = chunk_dir / name_hex
        chunk_path.write_bytes(content)
    
    data_map = streaming_encrypt_from_file(str(input_path), store_chunk)
    print(f"File encrypted with streaming method")
    
    # Create chunk retrieval function
    def get_chunk(hash_hex: str) -> bytes:
        chunk_path = chunk_dir / hash_hex
        return chunk_path.read_bytes()
    
    # Decrypt file
    decrypt_from_storage(data_map, str(output_path), get_chunk)

Advanced Features

from self_encryption import shrink_data_map, get_root_data_map

def advanced_example():
    # Create custom storage backend
    chunk_store = {}
    
    def store_chunk(name_hex: str, content: bytes) -> None:
        chunk_store[name_hex] = content
    
    def get_chunk(name_hex: str) -> bytes:
        return chunk_store[name_hex]
    
    # Use streaming encryption with custom storage
    data_map = streaming_encrypt_from_file("large_file.dat", store_chunk)
    
    # Get root data map for hierarchical storage
    root_map = get_root_data_map(data_map, get_chunk)
    print(f"Root data map level: {root_map.child()}")

Implementation Details

Core Process

  • Files are split into chunks of up to 1MB
  • Each chunk is processed in three steps:
    1. Compression (using Brotli)
    2. Encryption (using AES-256-CBC)
    3. XOR obfuscation

Key Generation and Security

  • Each chunk's encryption uses keys derived from the content hashes of three chunks:

    For chunk N:
    - Uses hashes from chunks [N, N+1, N+2]
    - Combined hash = hash(N) || hash(N+1) || hash(N+2)
    - Split into:
      - Pad (first X bytes)
      - Key (next 16 bytes for AES-256)
      - IV  (final 16 bytes)
    
  • This creates a chain of dependencies where each chunk's encryption depends on its neighbors

  • Provides both convergent encryption and additional security through the interdependencies

Encryption Flow

  1. Content Chunking:

    • File is split into chunks of optimal size
    • Each chunk's raw content is hashed (SHA3-256)
    • These hashes become part of the DataMap
  2. Per-Chunk Processing:

    // For each chunk:
    1. Compress data using Brotli
    2. Generate key materials:
       - Combine three consecutive chunk hashes
       - Extract pad, key, and IV
    3. Encrypt compressed data using AES-256-CBC
    4. XOR encrypted data with pad for obfuscation
    
  3. DataMap Creation:

    • Stores both pre-encryption (src) and post-encryption (dst) hashes
    • Maintains chunk ordering and size information
    • Required for both encryption and decryption processes

Decryption Flow

  1. Chunk Retrieval:

    • Use DataMap to identify required chunks
    • Retrieve chunks using dst_hash as identifier
  2. Per-Chunk Processing:

    // For each chunk:
    1. Regenerate key materials using src_hashes from DataMap
    2. Remove XOR obfuscation using pad
    3. Decrypt using AES-256-CBC with key and IV
    4. Decompress using Brotli
    
  3. Chunk Reassembly:

    • Chunks are processed in order specified by DataMap
    • Reassembled into original file

Storage Features

  • Flexible backend support through trait-based design

  • Supports both memory and disk-based storage

  • Streaming operations for memory efficiency

  • Hierarchical data maps for large files:

    // DataMap shrinking for large files
    1. Serialize large DataMap
    2. Encrypt serialized map using same process
    3. Create new DataMap with fewer chunks
    4. Repeat until manageable size reached
    

Security Properties

  • Content-based convergent encryption
  • Additional security through chunk interdependencies
  • Self-validating chunks through hash verification
  • No single point of failure in chunk storage
  • Tamper-evident through hash chains

Performance Optimizations

  • Parallel chunk processing where possible
  • Streaming support for large files
  • Efficient memory usage through chunking
  • Optimized compression settings
  • Configurable chunk sizes

This implementation provides a balance of:

  • Security (through multiple encryption layers)
  • Deduplication (through convergent encryption)
  • Performance (through parallelization and streaming)
  • Flexibility (through modular storage backends)

License

Licensed under the General Public License (GPL), version 3 (LICENSE http://www.gnu.org/licenses/gpl-3.0.en.html).

Linking Exception

self_encryption is licensed under GPLv3 with linking exception. This means you can link to and use the library from any program, proprietary or open source; paid or gratis. However, if you modify self_encryption, you must distribute the source to your modified version under the terms of the GPLv3.

See the LICENSE file for more details.

Contributing

Want to contribute? Great :tada:

There are many ways to give back to the project, whether it be writing new code, fixing bugs, or just reporting errors. All forms of contributions are encouraged!

For instructions on how to contribute, see our Guide to contributing.

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

self_encryption-0.32.4.tar.gz (156.6 kB view details)

Uploaded Source

Built Distributions

self_encryption-0.32.4-cp312-none-win_amd64.whl (937.5 kB view details)

Uploaded CPython 3.12 Windows x86-64

self_encryption-0.32.4-cp312-cp312-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded CPython 3.12 macOS 11.0+ ARM64

self_encryption-0.32.4-cp312-cp312-macosx_10_12_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.12 macOS 10.12+ x86-64

self_encryption-0.32.4-cp311-none-win_amd64.whl (937.2 kB view details)

Uploaded CPython 3.11 Windows x86-64

self_encryption-0.32.4-cp311-cp311-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

self_encryption-0.32.4-cp311-cp311-macosx_10_12_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.11 macOS 10.12+ x86-64

self_encryption-0.32.4-cp310-none-win_amd64.whl (937.2 kB view details)

Uploaded CPython 3.10 Windows x86-64

self_encryption-0.32.4-cp310-cp310-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

self_encryption-0.32.4-cp310-cp310-macosx_10_12_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.10 macOS 10.12+ x86-64

self_encryption-0.32.4-cp39-none-win_amd64.whl (937.4 kB view details)

Uploaded CPython 3.9 Windows x86-64

self_encryption-0.32.4-cp39-cp39-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

self_encryption-0.32.4-cp39-cp39-macosx_10_12_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.9 macOS 10.12+ x86-64

self_encryption-0.32.4-cp38-none-win_amd64.whl (937.4 kB view details)

Uploaded CPython 3.8 Windows x86-64

self_encryption-0.32.4-cp38-cp38-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

self_encryption-0.32.4-cp38-cp38-macosx_10_12_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.8 macOS 10.12+ x86-64

self_encryption-0.32.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

File details

Details for the file self_encryption-0.32.4.tar.gz.

File metadata

  • Download URL: self_encryption-0.32.4.tar.gz
  • Upload date:
  • Size: 156.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for self_encryption-0.32.4.tar.gz
Algorithm Hash digest
SHA256 90bb2ee794d1a68c4873cbf8ef3a8dd53cf2bbcaba46ef59d85249dfcc001866
MD5 978123343069d5001bceddbbaeac17fb
BLAKE2b-256 a842adf8a9564e92e3b7851d00e8b573145f589c9b4016c70c161f763babc7c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for self_encryption-0.32.4.tar.gz:

Publisher: python-publish.yml on dirvine/self_encryption

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file self_encryption-0.32.4-cp312-none-win_amd64.whl.

File metadata

File hashes

Hashes for self_encryption-0.32.4-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 c968363572ef212c4fe79038bc603225410917160f4d5ab05072f7261ad65ad4
MD5 aa342376774f3755240b9b12abf69194
BLAKE2b-256 9c17d3c29710a5751b3ad883671cfd04201ad15517aaeb09f588ac1b4c8fd581

See more details on using hashes here.

Provenance

The following attestation bundles were made for self_encryption-0.32.4-cp312-none-win_amd64.whl:

Publisher: python-publish.yml on dirvine/self_encryption

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file self_encryption-0.32.4-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for self_encryption-0.32.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 47b825d2e6e92b536b2c617270785adcf69e79b8a5816ae8d7814b4c1a894336
MD5 54969df6398770f9b23207cdfbc73468
BLAKE2b-256 35af5f41fc84d1467fa2b0ef7325ccd66b0e9d2952aedcff5d3f11efa529e8bc

See more details on using hashes here.

Provenance

The following attestation bundles were made for self_encryption-0.32.4-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: python-publish.yml on dirvine/self_encryption

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file self_encryption-0.32.4-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for self_encryption-0.32.4-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9e2165f446d2a42b270616f8a6dc05fed2e1f037c011e5091f3f1343ea1e70cb
MD5 5a8ebc493b37461180638f190b841963
BLAKE2b-256 bc6b5b6735bb3639d0756f63c574ebb51bd914c945ecb2482002ec7fabc56268

See more details on using hashes here.

Provenance

The following attestation bundles were made for self_encryption-0.32.4-cp312-cp312-macosx_10_12_x86_64.whl:

Publisher: python-publish.yml on dirvine/self_encryption

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file self_encryption-0.32.4-cp311-none-win_amd64.whl.

File metadata

File hashes

Hashes for self_encryption-0.32.4-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 ceb8220d886b87760c916673d3ffed6a30d2bd780e0d2e39c3ba4a4be51d70b7
MD5 68cfe18f300265f2a3b94eee40903b7b
BLAKE2b-256 b68110cf749730ff5bfc7936f1ce6f739f8e98ac176464ea8d040aab7e8181bd

See more details on using hashes here.

Provenance

The following attestation bundles were made for self_encryption-0.32.4-cp311-none-win_amd64.whl:

Publisher: python-publish.yml on dirvine/self_encryption

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file self_encryption-0.32.4-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for self_encryption-0.32.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d1eea21f7893155e35760fc1a2d3e0be75ad27b0e945325c53f4b47cb134d743
MD5 6e5a1513fe8e0b796afbd6fd1999c67f
BLAKE2b-256 eea28b5adc96deb6a9c91833207a993f139cc4f04e27c11b03df696962022c33

See more details on using hashes here.

Provenance

The following attestation bundles were made for self_encryption-0.32.4-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: python-publish.yml on dirvine/self_encryption

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file self_encryption-0.32.4-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for self_encryption-0.32.4-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3688e9cbe539d7d74db4ea660c330172b71ad195d00a79002d4953cea95c47b8
MD5 39ca0d15bda3b4e3b712bd97514e219a
BLAKE2b-256 a1ddda91fedd4f456a05ca915cddcfde1d3d24d4b2f053aa07fcc81aaf227ecc

See more details on using hashes here.

Provenance

The following attestation bundles were made for self_encryption-0.32.4-cp311-cp311-macosx_10_12_x86_64.whl:

Publisher: python-publish.yml on dirvine/self_encryption

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file self_encryption-0.32.4-cp310-none-win_amd64.whl.

File metadata

File hashes

Hashes for self_encryption-0.32.4-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 f762eb7011b45387a3aedb7da83e03440aae8a72a971ac94c199b20189a4a777
MD5 dbe4ea95df7dd520ba17dda0c24a7b54
BLAKE2b-256 fbf5ec1a05508f2a36247587c8cb0a036d2ba158f57dfc35341db3893bc231de

See more details on using hashes here.

Provenance

The following attestation bundles were made for self_encryption-0.32.4-cp310-none-win_amd64.whl:

Publisher: python-publish.yml on dirvine/self_encryption

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file self_encryption-0.32.4-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for self_encryption-0.32.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 098217bd8e038bd4ce10c9c57872c718ee44d3c7c4555834871492aae584b1cd
MD5 4a148ad591396b47e533326dc4076718
BLAKE2b-256 0d4fc868caa08049d289a71637f6dc32e6c24c7325a195a6315f95eb26464f27

See more details on using hashes here.

Provenance

The following attestation bundles were made for self_encryption-0.32.4-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: python-publish.yml on dirvine/self_encryption

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file self_encryption-0.32.4-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for self_encryption-0.32.4-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a9383900bed4130bd0aa243a2dcd4acdd873c509ede2f8dfa6b487ff2e6503c3
MD5 29a0cf7634a24df6fee127b4fb30d390
BLAKE2b-256 6af41df9e6402328a33cf61b5215a578ae66fdbef4137617258c3763aae82a5c

See more details on using hashes here.

Provenance

The following attestation bundles were made for self_encryption-0.32.4-cp310-cp310-macosx_10_12_x86_64.whl:

Publisher: python-publish.yml on dirvine/self_encryption

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file self_encryption-0.32.4-cp39-none-win_amd64.whl.

File metadata

File hashes

Hashes for self_encryption-0.32.4-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 301948f32cffbe3ad89c93e7a918a8c11f00fd07db51ece1acb11ce26f045e1d
MD5 8b9c484392ca9581e9ce53cea7baf491
BLAKE2b-256 7aa3c0673475a4a63ab79faa15bee238a53c769a571c69fc0e3fda57b6580e8e

See more details on using hashes here.

Provenance

The following attestation bundles were made for self_encryption-0.32.4-cp39-none-win_amd64.whl:

Publisher: python-publish.yml on dirvine/self_encryption

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file self_encryption-0.32.4-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for self_encryption-0.32.4-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6aea47bd61147ae791dce7f09cea30121a3c6502ce86898d8cf989a480fbd31f
MD5 862acf8760215605fcda189f2c1f3e1d
BLAKE2b-256 42ec077c7b9357b7ea3e2f213f6cf1f775c05337f8519883c30b4c038c35ec63

See more details on using hashes here.

Provenance

The following attestation bundles were made for self_encryption-0.32.4-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: python-publish.yml on dirvine/self_encryption

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file self_encryption-0.32.4-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for self_encryption-0.32.4-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 463c1919ed349d50c118c7d8cfaf845e0fa1b4b6b20405444fffd3bb7f4db29e
MD5 51a65f2849b6b07db189cd17612ddacd
BLAKE2b-256 1ad7e1a361fe42bae4a78ec569f1fbf93409da148fcc24239426da310ca3fd42

See more details on using hashes here.

Provenance

The following attestation bundles were made for self_encryption-0.32.4-cp39-cp39-macosx_10_12_x86_64.whl:

Publisher: python-publish.yml on dirvine/self_encryption

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file self_encryption-0.32.4-cp38-none-win_amd64.whl.

File metadata

File hashes

Hashes for self_encryption-0.32.4-cp38-none-win_amd64.whl
Algorithm Hash digest
SHA256 762a17a0111f8a4b37c25e00339a9ca3737d24791fbffc36b43f0fc80675bb41
MD5 72b46a96522a063c8761fc64f6251ec5
BLAKE2b-256 28db04b89d4c3bb85046098272a591206684f510c60be5d59702b66065ba7b86

See more details on using hashes here.

Provenance

The following attestation bundles were made for self_encryption-0.32.4-cp38-none-win_amd64.whl:

Publisher: python-publish.yml on dirvine/self_encryption

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file self_encryption-0.32.4-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for self_encryption-0.32.4-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9ba2535c1dafc091e4c3b184129ba22760d6615e5e62a42177d3fd6c7e308720
MD5 1152e9fb45d23a13e8acd756d17a1127
BLAKE2b-256 c81ba740cbb477bcd747ae6fd5817e8b4d954fea53bd4a6e4a1192379c367234

See more details on using hashes here.

Provenance

The following attestation bundles were made for self_encryption-0.32.4-cp38-cp38-macosx_11_0_arm64.whl:

Publisher: python-publish.yml on dirvine/self_encryption

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file self_encryption-0.32.4-cp38-cp38-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for self_encryption-0.32.4-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 eb983b66adb3c4ae071ea11941364a4a315145638117dc143e27850853671151
MD5 cd09d16328de54aed8f8ebd41acc32e4
BLAKE2b-256 dcde9754fab735a49162318e4bab3818f4791928a8df5ef33298e493a363826f

See more details on using hashes here.

Provenance

The following attestation bundles were made for self_encryption-0.32.4-cp38-cp38-macosx_10_12_x86_64.whl:

Publisher: python-publish.yml on dirvine/self_encryption

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file self_encryption-0.32.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for self_encryption-0.32.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c84ecf8899596b40c132e263e10d5ccee44c9e629dc02aea4238b60ef1953c4c
MD5 3dc6d3e9701d274ce98fc9994ce2a3a4
BLAKE2b-256 06d7ad8196c406a9d34476e59fe4023cf0d407f36f7ea6ce546b76e458f949bf

See more details on using hashes here.

Provenance

The following attestation bundles were made for self_encryption-0.32.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: python-publish.yml on dirvine/self_encryption

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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