#!/usr/bin/python3
# SPDX-License-Identifier: MIT
# (c) Hanno Böck
#
# Fuzzing [badkeys](https://badkeys.info) with [python-afl](https://github.com/jwilk/python-afl)
#
# Usage:
#   py-afl-fuzz -i keys -o out ./fuzzbk

import argparse
import json
import sys

import afl

import badkeys
from badkeys.dkim import parsedkim

ap = argparse.ArgumentParser()
ap.add_argument("--dkim", action="store_true")
ap.add_argument("--jwk", action="store_true")
ap.add_argument("--dnssec", action="store_true")
args = ap.parse_args()

afl.init()

inkey = sys.stdin.read()
if args.dkim:
    parsedkim(inkey)
elif args.jwk:
    try:
        jkey = json.loads(inkey)
    except (json.decoder.JSONDecodeError, UnicodeDecodeError, ValueError):
        pass
    else:
        badkeys.checkjwk(jkey, checks=["blocklist"])
elif args.dnssec:
    badkeys.checkdnskey(inkey, checks=["blocklist"])
else:
    badkeys.detectandcheck(inkey)
