Skip to main content

A library for decrypting LTspice® and PSpice® encrypted files

Project description

SpiceCrypt

A Python library and CLI tool for decrypting encrypted SPICE model files. SpiceCrypt supports LTspice® and PSpice® encryption formats with automatic format detection, enabling engineers to use lawfully obtained models in any simulator.

Features

  • LTspice text-based format — Custom DES variant used in encrypted .CIR, .SUB, .LIB, .ASY, and other files
  • LTspice Binary File format — Two-layer XOR stream cipher identified by the <Binary File> signature
  • PSpice Modes 0–5 — Custom DES (modes 0–2) and AES-256 ECB (modes 3–5) with $CDNENCSTART/$CDNENCFINISH delimited blocks
  • PSpice Mode 4 key recovery — Brute-force recovery of the user-supplied encryption key via a hardware-accelerated Rust extension (AES-NI / ARM Crypto)
  • Automatic format detection — All formats are detected and handled transparently
  • Streaming API — Memory-efficient processing for large files
  • No runtime dependencies — Pure Python with an optional compiled Rust extension for key recovery

Installation

Install from PyPI:

pip install spice-crypt

Or with uv:

uv tool install spice-crypt

Or add as a dependency to an existing project:

uv add spice-crypt

Updating

pip install --upgrade spice-crypt    # pip
uv tool upgrade spice-crypt          # uv tool
uv lock --upgrade-package spice-crypt # uv project dependency

Requirements

  • Python 3.10 or higher
  • No runtime dependencies for decryption
  • Rust toolchain required only to build the optional extension for Mode 4 key recovery

Command Line Usage

SpiceCrypt provides the spice-crypt command. All encryption formats are auto-detected.

# Run directly without installing
uvx spice-crypt path/to/encrypted_file.lib

# Decrypt to stdout
spice-crypt path/to/encrypted_file.lib

# Decrypt to a file
spice-crypt -o output.lib path/to/encrypted_file.lib

# Force overwrite if output file exists
spice-crypt -f -o output.lib path/to/encrypted_file.lib

# Verbose output (shows verification values)
spice-crypt --verbose path/to/encrypted_file.lib

# Suppress all error messages
spice-crypt --quiet -o output.lib path/to/encrypted_file.lib

# Process raw hex data (bypass LTspice format detection)
spice-crypt --raw path/to/hex_file.txt

# Show version
spice-crypt --version

PSpice Mode 4

Mode 4 is the only PSpice mode that uses a user-supplied encryption key. SpiceCrypt can recover this key via brute force or decrypt directly if the key is known.

# Brute-force recover the user key (~seconds on modern hardware)
spice-crypt --recover-key path/to/encrypted_file.lib

# Decrypt with a known user key
spice-crypt --user-key KEY path/to/encrypted_file.lib

Key recovery exploits a bug in PSpice's key derivation that reduces the effective keyspace from 2^256 to 2^32. See SPECIFICATIONS/pspice-attack-summary.md for details.

Python API

decrypt_stream(input_file, output_file=None, is_ltspice_file=None, user_key=None)

Stream-decrypt from a file path or file object. Supports all LTspice and PSpice formats with automatic detection.

from spice_crypt import decrypt_stream

# Decrypt file to file
_, verification = decrypt_stream("encrypted.lib", "decrypted.lib")

# Decrypt file to string
plaintext, verification = decrypt_stream("encrypted.lib")

# Use file objects
with open("encrypted.lib") as infile:
    plaintext, verification = decrypt_stream(infile)

# PSpice Mode 4 with a user key
plaintext, _ = decrypt_stream("encrypted.lib", user_key=b"mykey")

Parameters:

  • input_file — File path (str/PathLike) or file object (text or binary mode).
  • output_file (optional) — File path (str) or binary-mode file object. If None, returns decrypted content as a string.
  • is_ltspice_file (bool, optional) — Whether the data is in LTspice format. If True, skip PSpice detection; if False, treat as raw hex. Auto-detected if None.
  • user_key (bytes, optional) — User key bytes for PSpice Mode 4 decryption.

Returns: (content, (v1, v2))content is the decrypted string if no output file was given, otherwise None. (v1, v2) are format-specific verification values: CRC-based checksums for LTspice text format, CRC-32 and rotate-left hash for Binary File format, or (0, 0) for PSpice format.

decrypt(data, is_ltspice_file=None)

Decrypt an in-memory string of encrypted data. Supports LTspice text-based format, raw hex, and PSpice text-based formats (but not Binary File format or PSpice Mode 4 with a user key).

from spice_crypt import decrypt

with open("encrypted.lib") as f:
    data = f.read()

plaintext, (v1, v2) = decrypt(data)

Parameters:

  • data (str) — Encrypted data as a string (LTspice format, PSpice format, or raw hex).
  • is_ltspice_file (bool, optional) — Whether the data is in LTspice format. Auto-detected if None.

Returns: (plaintext, (v1, v2)) — The decrypted text and a tuple of format-specific verification values (see decrypt_stream above).

Lower-level APIs

The following classes are exported for direct use:

  • LTspiceFileParser — Text-based DES format parser
  • BinaryFileParser — Binary File format parser
  • PSpiceFileParser — PSpice format parser (modes 0–5)
  • CryptoState — LTspice DES key derivation and per-block decryption
  • LTspiceDES — LTspice custom DES variant
  • PSpiceDES — PSpice custom DES variant

Supported Formats

LTspice Text-Based DES

Encrypted files contain hex-encoded ciphertext delimited by * Begin: and * End <v1> <v2> comment markers. The first 1024 bytes form a crypto table used for key derivation and as an XOR keystream source. All subsequent blocks are decrypted with a custom DES variant that uses non-standard S-boxes and permutation tables, preceded by an XOR stream cipher layer keyed from the same table.

LTspice Binary File

Binary files are identified by a 20-byte signature (\r\n<Binary File>\r\n\r\n\x1a). Decrypted with a two-layer XOR stream cipher using two 32-bit keys from the file header and a 2593-byte substitution table with prime-based stepping.

PSpice Modes 0–5

Encrypted regions are delimited by $CDNENCSTART / $CDNENCFINISH markers within otherwise plaintext files. Six encryption modes exist:

Mode Cipher Key Source
0 Custom DES Hardcoded
1–2 Custom DES Hardcoded + version
3 AES-256 ECB Hardcoded + version
4 AES-256 ECB Hardcoded XOR user key + version
5 AES-256 ECB Hardcoded + version

Modes 0–3 and 5 use key material derived entirely from constants in the PSpice binary. Mode 4 incorporates a user-supplied key, but a bug in the key derivation passes only the short key to the AES engine instead of the extended key, leaving just 4 bytes unknown and reducing the effective keyspace to 2^32. This makes the key recoverable by brute force.

Specifications

Detailed technical documentation of the encryption schemes:

Purpose and Legal Basis

Many third-party component vendors distribute SPICE models exclusively as LTspice- or PSpice-encrypted files. This encryption locks the models to a single simulator, preventing their use in open-source and alternative tools such as NGSpice, Xyce, PySpice, and others. SpiceCrypt exists to restore interoperability by allowing engineers to use lawfully obtained models in the simulator of their choice.

This type of reverse engineering for interoperability is specifically permitted by law:

  • United States: 17 U.S.C. § 1201(f) permits circumvention of technological protection measures for the sole purpose of achieving interoperability between independently created programs. Section 1201(f)(2) explicitly allows distributing the tools developed for this purpose to others seeking interoperability. Additionally, § 1201(g) permits circumvention when conducted in good-faith encryption research — studying the flaws and vulnerabilities of encryption technologies — and allows dissemination of the research findings.
  • European Union: Article 6 of the Software Directive (2009/24/EC) permits decompilation and reverse engineering when it is indispensable to achieve interoperability with independently created programs. Article 6(3) provides that this right cannot be overridden by contract.

Disclaimer

The legal justifications above pertain to the underlying research, technical analysis, and release of SpiceCrypt itself. They are provided to demonstrate that this work was conducted in good faith and to outline its intended purpose. They should not be construed as legal advice.

Encrypted SPICE models are often distributed under license agreements or terms of service that end users may have accepted. It is the end user's responsibility to ensure that their use of SpiceCrypt does not violate any such agreements or any applicable laws in their jurisdiction.

SpiceCrypt is intended solely for enabling simulator interoperability with lawfully obtained models. Using it to violate intellectual property rights is immoral and is not an acceptable use of the tool.

Research Contributors

  • Joe T. Sylve, Ph.D. — Reverse engineering and documentation of the LTspice text-based DES encryption format and PSpice encryption modes.
  • Lucas Gerads — Reverse engineering and documentation of the LTspice Binary File encryption format.

Trademarks

LTspice® is a registered trademark of Analog Devices, Inc.
PSpice® is a registered trademark of Cadence Design Systems, Inc.

License

This project is licensed under the GNU Affero General Public License v3.0 or later.

Copyright (c) 2025-2026 Joe T. Sylve, Ph.D.

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

spice_crypt-2.0.2.tar.gz (122.3 kB view details)

Uploaded Source

Built Distributions

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

spice_crypt-2.0.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (297.1 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

spice_crypt-2.0.2-cp314-cp314t-win_arm64.whl (191.7 kB view details)

Uploaded CPython 3.14tWindows ARM64

spice_crypt-2.0.2-cp313-cp313t-win_arm64.whl (191.9 kB view details)

Uploaded CPython 3.13tWindows ARM64

spice_crypt-2.0.2-cp310-abi3-win_arm64.whl (193.3 kB view details)

Uploaded CPython 3.10+Windows ARM64

spice_crypt-2.0.2-cp310-abi3-win_amd64.whl (198.2 kB view details)

Uploaded CPython 3.10+Windows x86-64

spice_crypt-2.0.2-cp310-abi3-musllinux_1_2_x86_64.whl (510.0 kB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ x86-64

spice_crypt-2.0.2-cp310-abi3-musllinux_1_2_aarch64.whl (465.4 kB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

spice_crypt-2.0.2-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (296.6 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ x86-64

spice_crypt-2.0.2-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (287.8 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

spice_crypt-2.0.2-cp310-abi3-macosx_11_0_arm64.whl (262.0 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

spice_crypt-2.0.2-cp310-abi3-macosx_10_12_x86_64.whl (273.1 kB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file spice_crypt-2.0.2.tar.gz.

File metadata

  • Download URL: spice_crypt-2.0.2.tar.gz
  • Upload date:
  • Size: 122.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for spice_crypt-2.0.2.tar.gz
Algorithm Hash digest
SHA256 d972fa3dd1f83fa1718be72ab0bea1fc56e2fe5dc859d8e4e1554cf86d1b1169
MD5 67d5f2bf847f3e2adc91880db413a392
BLAKE2b-256 49dc61aa55f08e45ceff05ed9d007bdda0d2ede18738592085147d8ff0d7320e

See more details on using hashes here.

Provenance

The following attestation bundles were made for spice_crypt-2.0.2.tar.gz:

Publisher: publish.yml on jtsylve/spice-crypt

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

File details

Details for the file spice_crypt-2.0.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for spice_crypt-2.0.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f696fb4902aede3acda2f175d3ee8b3f980474ee5a40c5416428b05e8224c44e
MD5 328bd4da925a33fd89918df8ad17c2c6
BLAKE2b-256 930ba35d97e0074259a7aee80bd3e586d2edfa628cb43805a645e8602e714c99

See more details on using hashes here.

Provenance

The following attestation bundles were made for spice_crypt-2.0.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on jtsylve/spice-crypt

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

File details

Details for the file spice_crypt-2.0.2-cp314-cp314t-win_arm64.whl.

File metadata

File hashes

Hashes for spice_crypt-2.0.2-cp314-cp314t-win_arm64.whl
Algorithm Hash digest
SHA256 38954afcf89f6e34c01a979e199f8d9cd5d0db357ee284381f7f67b825e40907
MD5 84c4371ab4f0d9ae07ee3233d6b52cdc
BLAKE2b-256 6655848f214ac2fc636662fa397addc5589b5c05ce4b1f638ecb1fe1ef989f4a

See more details on using hashes here.

Provenance

The following attestation bundles were made for spice_crypt-2.0.2-cp314-cp314t-win_arm64.whl:

Publisher: publish.yml on jtsylve/spice-crypt

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

File details

Details for the file spice_crypt-2.0.2-cp313-cp313t-win_arm64.whl.

File metadata

File hashes

Hashes for spice_crypt-2.0.2-cp313-cp313t-win_arm64.whl
Algorithm Hash digest
SHA256 ac622a4833333238a72c21272e004dcb40bcc408ab1ce0aaf0c417ad95fb5041
MD5 6ea956357a0f805f60037c00887a6bda
BLAKE2b-256 670e2e6c5dcb98f75f2e002b7ab275320766d51d9c2b915987fdfcafe881729e

See more details on using hashes here.

Provenance

The following attestation bundles were made for spice_crypt-2.0.2-cp313-cp313t-win_arm64.whl:

Publisher: publish.yml on jtsylve/spice-crypt

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

File details

Details for the file spice_crypt-2.0.2-cp310-abi3-win_arm64.whl.

File metadata

  • Download URL: spice_crypt-2.0.2-cp310-abi3-win_arm64.whl
  • Upload date:
  • Size: 193.3 kB
  • Tags: CPython 3.10+, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for spice_crypt-2.0.2-cp310-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 ac646e8d1e36da042e6ab51d177024c647fc3f4b0df332711bd1a77bb69ae289
MD5 06da29c9eda6aaaf63f85b0412d3e5e5
BLAKE2b-256 7b51fe27910cfdb7cc3feeb6c27069d80f4cf2918916e72b29484e503d5d13da

See more details on using hashes here.

Provenance

The following attestation bundles were made for spice_crypt-2.0.2-cp310-abi3-win_arm64.whl:

Publisher: publish.yml on jtsylve/spice-crypt

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

File details

Details for the file spice_crypt-2.0.2-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: spice_crypt-2.0.2-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 198.2 kB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for spice_crypt-2.0.2-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 6cab16b8d565699ea2d9761bab6339dc7a6d53aa02118e3917aeb2eb8aacbb7c
MD5 c7ec8f0a7a679b25d9d52882353ff3f6
BLAKE2b-256 c54b8806fa21384710edddace4511884d2c820cd555320313c95d9002d26e26f

See more details on using hashes here.

Provenance

The following attestation bundles were made for spice_crypt-2.0.2-cp310-abi3-win_amd64.whl:

Publisher: publish.yml on jtsylve/spice-crypt

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

File details

Details for the file spice_crypt-2.0.2-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for spice_crypt-2.0.2-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 146924902f490092f6f2ad07636a7aff5fa3b90b7d817e1fbc385b58e275e743
MD5 6d4ea681d259452014c9be4768fa5bdc
BLAKE2b-256 b42ee442b40f876027c3ec70450b86acbf0b01c65af0bf3b3fcf620caa7a741b

See more details on using hashes here.

Provenance

The following attestation bundles were made for spice_crypt-2.0.2-cp310-abi3-musllinux_1_2_x86_64.whl:

Publisher: publish.yml on jtsylve/spice-crypt

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

File details

Details for the file spice_crypt-2.0.2-cp310-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for spice_crypt-2.0.2-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 9773002f3d2dc87cf7d691efb7a4665654acf8a6f16654c8ac949b947976e81f
MD5 2342a7b7c072d10d0d0e696a48383066
BLAKE2b-256 4647d4019e78862b16f687823a2d6c5af2d59a1c7dfc94add40e5f0488b18076

See more details on using hashes here.

Provenance

The following attestation bundles were made for spice_crypt-2.0.2-cp310-abi3-musllinux_1_2_aarch64.whl:

Publisher: publish.yml on jtsylve/spice-crypt

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

File details

Details for the file spice_crypt-2.0.2-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for spice_crypt-2.0.2-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9c11c1075f6770dc80765a0abba7c6fbad27a7e7fa8b49557f3d952bc698f974
MD5 7c67cd0fe0559eaaee7a6b5f2f47c484
BLAKE2b-256 c7d8cf86676efaa6c1a53d129e1add645bb975a1013ca211487d7ff058139ad9

See more details on using hashes here.

Provenance

The following attestation bundles were made for spice_crypt-2.0.2-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on jtsylve/spice-crypt

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

File details

Details for the file spice_crypt-2.0.2-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for spice_crypt-2.0.2-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 211947f7fc6b8c95a746d67ec4204791d403338ba54becb9c7ec0ae561048ed4
MD5 7d74312b2e372799002cb0f2674d2ce6
BLAKE2b-256 134143b55f621cbf9624212278cbae55da3c4bcaab88a759c6e9677c3ebc1e5f

See more details on using hashes here.

Provenance

The following attestation bundles were made for spice_crypt-2.0.2-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish.yml on jtsylve/spice-crypt

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

File details

Details for the file spice_crypt-2.0.2-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spice_crypt-2.0.2-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0112abeb8b2fbd5f07417c0c55e69cca7a2af8cc6637e510a5249f48cd2acad7
MD5 c43c4eb0b1e78534ce5ecb4615b3a72a
BLAKE2b-256 d4fe673b7e4b2550e88a18a84829dd17f3f5a195cc607398f258f11227830c45

See more details on using hashes here.

Provenance

The following attestation bundles were made for spice_crypt-2.0.2-cp310-abi3-macosx_11_0_arm64.whl:

Publisher: publish.yml on jtsylve/spice-crypt

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

File details

Details for the file spice_crypt-2.0.2-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for spice_crypt-2.0.2-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 144b0e2503595eafb9be5d86008c5eeb93241e529740b2fb4b5f5e40f469c974
MD5 484d21faaf194f6c6471e4ecfd800bc3
BLAKE2b-256 dce94429d0c1e6f3af1d71c626730bbfa1106e80946543877ff826e3a2517555

See more details on using hashes here.

Provenance

The following attestation bundles were made for spice_crypt-2.0.2-cp310-abi3-macosx_10_12_x86_64.whl:

Publisher: publish.yml on jtsylve/spice-crypt

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 Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page