etc.git


etc

~ scripts and random things
git clone https://github.com/djnnvx/etc.git
log | files | refs | archive

gen_corpus.sh (2756B)

      1 #!/bin/bash
      2 # gen_corpus.sh - mint realistic DER seeds for the libksba harnesses with openssl.
      3 # Offline only: a throwaway mini-CA (conf/ca.cnf) signs a leaf, a CRL and an OCSP
      4 # response. Output: corpus/{cert,crl,cms,ocsp}/*.der
      5 set -euo pipefail
      6 
      7 SCRIPT_DIR="$(cd "$(dirname "${0}")" && pwd)"
      8 cd "${SCRIPT_DIR}"
      9 
     10 CADIR="$(mktemp -d)"
     11 export CADIR
     12 CONF="${SCRIPT_DIR}/conf/ca.cnf"
     13 trap 'rm -rf "${CADIR}"' EXIT
     14 
     15 log() { echo "[*] $*"; }
     16 ok()  { echo "[+] $*"; }
     17 
     18 mkdir -p corpus/cert corpus/crl corpus/cms corpus/ocsp
     19 mkdir -p "${CADIR}/newcerts"
     20 : > "${CADIR}/index.txt"
     21 echo 1000 > "${CADIR}/serial"
     22 echo 1000 > "${CADIR}/crlnumber"
     23 
     24 log "CA + leaf..."
     25 openssl req -x509 -newkey rsa:2048 -nodes -days 3650 \
     26     -keyout "${CADIR}/ca.key" -out "${CADIR}/ca.crt" \
     27     -subj "/CN=Fuzz Root CA/O=djnn/C=FR" \
     28     -addext "basicConstraints=critical,CA:TRUE" \
     29     -addext "keyUsage=critical,keyCertSign,cRLSign" 2>/dev/null
     30 
     31 openssl req -newkey rsa:2048 -nodes \
     32     -keyout "${CADIR}/leaf.key" -out "${CADIR}/leaf.csr" \
     33     -subj "/CN=leaf.example/O=djnn/C=FR" 2>/dev/null
     34 
     35 openssl ca -batch -config "${CONF}" -notext \
     36     -in "${CADIR}/leaf.csr" -out "${CADIR}/leaf.crt" 2>/dev/null
     37 
     38 openssl x509 -in "${CADIR}/ca.crt"   -outform DER -out corpus/cert/ca.der
     39 openssl x509 -in "${CADIR}/leaf.crt" -outform DER -out corpus/cert/leaf.der
     40 ok "cert seeds"
     41 
     42 log "CRL (empty + one revoked entry)..."
     43 openssl ca -batch -config "${CONF}" -gencrl -out "${CADIR}/crl-empty.pem" 2>/dev/null
     44 openssl crl -in "${CADIR}/crl-empty.pem" -outform DER -out corpus/crl/empty.der
     45 openssl ca -batch -config "${CONF}" -revoke "${CADIR}/leaf.crt" -crl_reason keyCompromise 2>/dev/null
     46 openssl ca -batch -config "${CONF}" -gencrl -out "${CADIR}/crl-revoked.pem" 2>/dev/null
     47 openssl crl -in "${CADIR}/crl-revoked.pem" -outform DER -out corpus/crl/revoked.der
     48 ok "CRL seeds"
     49 
     50 log "CMS / PKCS#7 signed..."
     51 echo "fuzz me" > "${CADIR}/msg.txt"
     52 openssl cms -sign -binary -nodetach -outform DER \
     53     -signer "${CADIR}/leaf.crt" -inkey "${CADIR}/leaf.key" \
     54     -in "${CADIR}/msg.txt" -out corpus/cms/signed.der 2>/dev/null
     55 ok "CMS seed"
     56 
     57 log "OCSP response (offline responder)..."
     58 if openssl ocsp -issuer "${CADIR}/ca.crt" -cert "${CADIR}/leaf.crt" \
     59         -reqout "${CADIR}/req.der" -no_nonce 2>/dev/null \
     60    && openssl ocsp -index "${CADIR}/index.txt" -CA "${CADIR}/ca.crt" \
     61         -rsigner "${CADIR}/ca.crt" -rkey "${CADIR}/ca.key" \
     62         -reqin "${CADIR}/req.der" -respout corpus/ocsp/resp.der -no_nonce 2>/dev/null; then
     63     ok "OCSP seed"
     64 else
     65     echo "[!] OCSP seed skipped (openssl ocsp responder unavailable); seeding with cert DER"
     66     cp corpus/cert/leaf.der corpus/ocsp/leaf.der
     67 fi
     68 
     69 echo
     70 ok "corpus ready:"
     71 find corpus -type f -printf '    %p (%s bytes)\n' | sort