Skip to content
View DannyBCarrJr's full-sized avatar
🎯
Focusing
🎯
Focusing

Highlights

  • Pro

Block or report DannyBCarrJr

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
DannyBCarrJr/README.md

Danny B. Carr, Jr.

Security engineer working in PKI and certificate lifecycle automation, currently spending most of my attention on post-quantum migration.

I publish measurements rather than opinions. Every claim in my work is labeled Verified (measured here, with the script and captured output shipped alongside it), Reported (cited to a standard or vendor document, not re-derived), or Proposed (designed, not yet shipped or measured). The labels are dull on purpose.

Measured corpora, archived and citable

Three repositories, each one a question nobody had published measurements for. Every cell is a script plus its captured output, versions pinned per cell, and each carries a PRIOR-ART.md recording what published work already covers. Those files have demoted my own claims more than once, which is why they exist. All three are indexed with their stamps, their citations, and the retraction record at carrdigital.dev/research.

pqc-cert-matrix · 10.5281/zenodo.21749600 What happens when a post-quantum or hybrid X.509 chain meets real client software. Eight chain shapes against eleven client stacks, 88 cells.

  • Parsing never fails. All 88 cells parse, so a parse-based certificate inventory has a 100% false-pass rate on exactly the chains you care about.
  • Windows splits against itself: CNG validates ML-DSA chains offline while schannel cannot complete a TLS handshake with them.
  • Only rustls names the algorithm it rejected. Everyone else emits trust-store-shaped errors that send operators to the wrong layer.

pqc-chain-budget · 10.5281/zenodo.21846142 Post-quantum signature sizes projected onto each site's own deployed chain. Captured 2026-08-07 from the Tranco top 10,000: 8,152 domains completed a handshake and 8,151 chains parsed, which is the set the projections run on.

  • Under a drop-in ML-DSA-44 migration, 85.1% of measured sites project past the IW10 initial congestion window, an extra round trip per full handshake.
  • Leaf-only migration fits almost everywhere: 0.3% exceed IW10.
  • Certificate compression recovers a median 985 bytes today and roughly the same 985 bytes after migration, which is 7.4% of an ML-DSA-44 chain. The saving is structural, and migration adds no structure.

pqc-chain-selection · 10.5281/zenodo.21911032 Which certificate chain a TLS 1.3 server actually sends when the client says which signature algorithms it will accept. Five server stacks.

  • Three of five sent a chain the client had said it would not accept, and every one of those handshakes completed.
  • All three are conformant. RFC 8446 makes the constraint a SHOULD and tells a server with no acceptable chain to send one anyway, so a migration cannot rely on signature_algorithms_cert to keep a chain off the wire.
  • rustls cannot honour it even if you want it to: the extension never reaches the certificate resolver.

Post-Quantum, Measured

A practitioner's guide to moving real systems onto the NIST post-quantum standards (FIPS 203, 204, 205): TLS, certificate hierarchies, and application crypto, with the lab output shipped next to the claims.

Writing

carrdigital.dev/writing, accuracy-first, every article with a provenance section separating what I measured from what I am citing.

Tools

Three, all free, all backed by the corpora above rather than by estimates. Each one tells you which of its numbers are measured and which are projected.

Handshake budget works out whether a post-quantum certificate chain fits inside TCP's initial congestion window, and which client stacks can actually complete the handshake.

Chain check looks up any top-10k domain, shows its real certificate chain as measured, and checks whether that same chain still fits the server's first flight once ML-DSA signs it. Per-site, from the measured data, with the assumptions stated.

Certificate decoder takes a pasted X.509 certificate and shows its structure: tags, lengths, byte offsets, decoded object identifiers, and key usage bits. It runs entirely in your browser and uploads nothing, which for a tool that accepts certificates is the only defensible design.

Etergis

etergis.com, a digital continuity platform: encrypted storage with delivery to the people who should receive it, on a schedule you control.

Zero-knowledge architecture, AES-256-GCM with AAD, Argon2id, X25519, and a versioned envelope format so the cryptography can be upgraded without migrating anyone's data by hand. The current envelope carries a hybrid X25519 and ML-KEM-768 key encapsulation for the owner's at-rest copy, which is the surface that matters for harvest-now-decrypt-later. Recipient delivery is an Argon2id passphrase wrap and is not hybrid, by decision, so I do not describe the product as end-to-end post-quantum. FastAPI, Flutter, PostgreSQL, Cloudflare, Render. Live on web, Google Play, and the App Store.

etergis-recover opens an Etergis export without Etergis: no account, no network, no server, and no dependency on the company still existing. A vault you cannot open without the vendor is a vault the vendor owns, so the decryptor is public and MIT.

Architecture and whitepaper: Etergis-Docs.

Working with

Python Dart/Flutter PowerShell Bash OpenSSL Docker PostgreSQL Cloudflare GCP Wireshark

CompTIA Security+, CySA+, and CASP.

Reaching me

Corrections are the most useful thing you can send. If a number in any of these repositories disagrees when you rerun it, open an issue with the command that shows it and I will fix it in the open.

For anything else: carrdigital.dev.

Pinned Loading

  1. DannyBCarrJr DannyBCarrJr Public

    Profile README.

  2. pqc-cert-matrix pqc-cert-matrix Public

    Measured client behaviour for post-quantum and hybrid X.509 chains: 8 chain shapes x 11 client stacks, 88 cells, every one a script plus captured output.

    Python

  3. post-quantum-measured-lab post-quantum-measured-lab Public

    Runnable labs and captured OpenSSL 3.5.5 output backing every Verified claim in the book Post-Quantum, Measured.

    Python

  4. Etergis-Docs Etergis-Docs Public

    Etergis — Security architecture, whitepaper, and public documentation

  5. pqc-chain-budget pqc-chain-budget Public

    Per-site projection of post-quantum certificate chain size against TCP's initial congestion window, on 8,152 real chains captured from the Tranco top 10,000.

    Python

  6. pqc-chain-selection pqc-chain-selection Public

    Measured behaviour of TLS 1.3 server software choosing between a classical and a post-quantum certificate chain when the client constrains certificate signature algorithms. Five stacks, every cell …

    Shell