Try it
$ python -m pip install emet==1.3.0 $ emet selftest
EMET saves a SHA-256 fingerprint of a file, a prompt or a view, then later reads the bytes again and compares. Use it before a model, a reviewer or a pipeline reads content that should not have changed.
Three answers
Change one byte and the answer changes
$ python membrane.py verify demo_sample.txt MATCH demo_sample.txt want=d02206abca2a… got=d02206abca2a… (exit 0) # append one byte to the file, ask the same question $ python membrane.py verify demo_sample.txt DRIFT demo_sample.txt want=d02206abca2a… got=b072d611645e… (exit 1) # one spec, four language implementations, CI on every push membrane.py → CONFORMANCE 48/48 vectors pass impl/rust/emet → CONFORMANCE 40/40 supported vectors pass impl/js/emet.js → CONFORMANCE 40/40 supported vectors pass impl/go/emet → CONFORMANCE 35/35 core vectors pass
The shared suite has 48 vectors: 35 core, 5 receipt, 4 rebind and 4 evaluation-receipt cases. Python runs all 48, Rust and Node run 40, and Go runs the 35 core vectors. See a sample report →
EMET v1.3.0 release
v1.3.0 on GitHub and emet 1.3.0 on PyPI. PyPI serves the wheel and source archive.
Machine-readable status: security-tools.json.