7 releases

0.2.0 Oct 29, 2020
0.1.5 Jun 23, 2019
0.1.3 Apr 27, 2019
0.1.2 Oct 10, 2018

#2105 in Parser implementations

Download history 61/week @ 2024-07-25 43/week @ 2024-08-01 46/week @ 2024-08-08 26/week @ 2024-08-15 30/week @ 2024-08-22 37/week @ 2024-08-29 44/week @ 2024-09-05 101/week @ 2024-09-12 50/week @ 2024-09-19 45/week @ 2024-09-26 32/week @ 2024-10-03 30/week @ 2024-10-10 19/week @ 2024-10-17 12/week @ 2024-10-24 22/week @ 2024-10-31 15/week @ 2024-11-07

71 downloads per month
Used in sn0int

Apache-2.0

46KB
520 lines

sloppy-rfc4880 Build Status crates.io docs.rs

Pure rust parser for RFC-4880 (OpenPGP Message Format). The codebase is heavily based on the openpgp crate, but all crypto code has been removed to keep the number of dependencies low for projects that only need to decode the binary packet format.

In addition, the codebase has been hardened to ensure it can handle arbitrary input without crashing. Also, an optional allocation limit has been added to avoid OOM on bogus inputs.

Fuzzing

The codebase was extensively fuzzed using cargo-fuzz and libfuzzer. The corpus folder has been bootstrapped using a full dump of a pgp keyserver:

git clone https://github.com/kpcyrd/sloppy-rfc4880
mkdir pgp
cd pgp
wget -c -r -p -e robots=off -N -l1 --cut-dirs=3 -nH http://pgp.key-server.io/dump/2018-10-07/
cd ../sloppy-rfc4880

for x in ../pgp/sks-dump-*; do
    cat "$x" | cargo run --release --example split fuzz/corpus/rfc4880/pgp
    cargo +nightly fuzz cmin --release rfc4880
done

You can download a copy of a pre-processed corpus folder from the release page.

To start fuzzing, run:

cargo +nightly fuzz run --release rfc4880 -j $(nproc) -- -timeout=240 -rss_limit_mb=500

License

Apache-2.0

Dependencies

~1.1–1.9MB
~40K SLoC