<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: oleg-vdv</title>
    <description>The latest articles on DEV Community by oleg-vdv (@olegvdv).</description>
    <link>https://dev.to/olegvdv</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4032907%2Fed5d89d5-8281-416d-9a0e-654571c8c30c.png</url>
      <title>DEV Community: oleg-vdv</title>
      <link>https://dev.to/olegvdv</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/olegvdv"/>
    <language>en</language>
    <item>
      <title>"Your company banned ChatGPT. There's a third option."</title>
      <dc:creator>oleg-vdv</dc:creator>
      <pubDate>Tue, 01 Sep 2026 16:29:23 +0000</pubDate>
      <link>https://dev.to/olegvdv/your-company-banned-chatgpt-theres-a-third-option-4gpl</link>
      <guid>https://dev.to/olegvdv/your-company-banned-chatgpt-theres-a-third-option-4gpl</guid>
      <description>

&lt;p&gt;Most companies handle the "employees are pasting customer data into ChatGPT" problem in one of two ways.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option one: block it.&lt;/strong&gt; Firewall rules, an acceptable-use policy, a stern email. What actually happens is that people use their phones, personal laptops, and a browser profile you don't manage. You haven't stopped the leak; you've stopped seeing it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option two: allow it and hope.&lt;/strong&gt; Training, a wiki page about "don't paste PII", and an incident waiting to be discovered by someone else.&lt;/p&gt;

&lt;p&gt;There's a third option that I don't think gets built often enough: let the request through, but strip the sensitive parts on the way out and put them back on the way in. The model never sees the customer's name. The employee never notices anything happened.&lt;/p&gt;

&lt;p&gt;That's what I built AI-Gate for.&lt;/p&gt;

&lt;h2&gt;
  
  
  The idea in one example
&lt;/h2&gt;

&lt;p&gt;An internal app sends this prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer Yerzhan Nursultanuly, ID 900715300005, disputes a charge of 145,000 KZT...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What actually leaves your network:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer [PERSON_1], ID [NATIONAL_ID_1], disputes a charge of [AMOUNT_1]...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model answers about &lt;code&gt;[PERSON_1]&lt;/code&gt;. The gateway substitutes the real values back before the response reaches the application. From the app's perspective it just talked to OpenAI normally. From OpenAI's perspective, it never received a single piece of personal data.&lt;/p&gt;

&lt;p&gt;The mapping between &lt;code&gt;[PERSON_1]&lt;/code&gt; and the real name lives &lt;strong&gt;in memory only&lt;/strong&gt;, encrypted, with a TTL and guaranteed destruction once the response is detokenized. It is never written to disk and never appears in the audit log — the log records types and counts, not values.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integrating it is one line
&lt;/h2&gt;

&lt;p&gt;For any application already using an OpenAI-compatible client, you change the base URL and nothing else:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://aigate.internal:8080/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;channel key&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o-mini&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Customer Yerzhan Nursultanuly, ID 900715300005...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A detail that matters more than it looks: the &lt;strong&gt;real provider API key lives only on the gateway&lt;/strong&gt;. Applications get a channel key instead. Revoking one team's access stops being a redeployment and starts being a config change — and a leaked application key no longer means a leaked OpenAI key.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three channels, because the leak isn't only in your code
&lt;/h2&gt;

&lt;p&gt;An egress proxy covers your own applications, RAG pipelines and n8n workflows. It does not cover the two places people actually leak data:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The browser.&lt;/strong&gt; A Chrome extension intercepts text &lt;em&gt;before&lt;/em&gt; it's sent to chat.openai.com, claude.ai or gemini.google.com, masks it through the gateway, and substitutes values back into the assistant's reply as it renders. Deployable via GPO/MDM, so it's not opt-in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The clipboard.&lt;/strong&gt; A workstation agent catches sensitive data on its way into local LLM apps — Cursor, Claude Desktop — and detokenizes copied responses. This is the gap neither the browser nor the network perimeter can see, and it's the one that grows every month as AI moves into desktop tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design decisions worth arguing about
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Fail-closed, always.&lt;/strong&gt; Any error in detection or parsing blocks the request instead of passing it through. This will occasionally annoy someone. The alternative is that a parser bug becomes a data breach, and the asymmetry there isn't close: a false block costs a retry, a false pass costs a regulatory fine and a disclosure letter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zero dependencies.&lt;/strong&gt; The core is pure Python 3.11+ standard library. No PyPI at install time, which means it drops into air-gapped environments — exactly the kind of environment where this problem is most acute and where "just pip install" is not an available move. It also means the supply-chain attack surface of a tool that sees all your prompts is approximately zero.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tamper-evident audit.&lt;/strong&gt; The log is append-only JSONL with a SHA-256 hash chain. You can't quietly delete the record of a blocked request; verification detects it. For a compliance tool this is the difference between "we have logs" and "we have evidence".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sensitive prompts can be routed to a local model.&lt;/strong&gt; The provider registry supports OpenAI-compatible endpoints including vLLM, Ollama and LM Studio, plus the Anthropic Messages API. A policy rule can say: anything containing sensitive data goes to the local model only, never to a vendor. Masking and routing solve different halves of the same problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Semantic detection on top of pattern detection.&lt;/strong&gt; Regexes catch IDs, account numbers and names. They do not catch "our Q3 acquisition target is a logistics company in Almaty with a 40% margin" — a leak with no PII in it at all. An LLM-judge runs over the &lt;em&gt;already anonymized&lt;/em&gt; text and flags meaning-level leaks, in flag or block mode, fail-closed if the judge is unreachable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env      &lt;span class="c"&gt;# set AIGATE_PROVIDER_API_KEY&lt;/span&gt;
python &lt;span class="nt"&gt;-m&lt;/span&gt; gateway.main    &lt;span class="c"&gt;# gateway on :8080&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or on-prem in a container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The control plane console is at &lt;code&gt;http://localhost:8080/admin&lt;/code&gt; — policies, RBAC, dashboards and compliance reports.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this is honest about its limits
&lt;/h2&gt;

&lt;p&gt;Detection is imperfect and always will be. Names in particular are the hard case in every language, and a masking gateway that claims 100% recall is lying. Fail-closed helps, the local-model routing rule helps more, and semantic detection catches a class regexes structurally cannot — but the right mental model is defense in depth, not a solved problem.&lt;/p&gt;

&lt;p&gt;It's also worth saying plainly: this reduces exposure, it doesn't create legal compliance by itself. What it gives you is the technical control and the evidence trail that a compliance program needs underneath it.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/oleg-vdv/AI-Gateway" rel="noopener noreferrer"&gt;https://github.com/oleg-vdv/AI-Gateway&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd be interested to hear how others are handling this. Has your organization landed on block, allow, or something in between — and if you've deployed a masking layer, what broke first?&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


---
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>privacy</category>
      <category>python</category>
    </item>
    <item>
      <title>From Infrastructure to Open Source: Lessons Learned Building 4 Security &amp; Automation Tools</title>
      <dc:creator>oleg-vdv</dc:creator>
      <pubDate>Fri, 24 Jul 2026 00:47:58 +0000</pubDate>
      <link>https://dev.to/olegvdv/from-infrastructure-to-open-source-lessons-learned-building-4-security-automation-tools-49he</link>
      <guid>https://dev.to/olegvdv/from-infrastructure-to-open-source-lessons-learned-building-4-security-automation-tools-49he</guid>
      <description>&lt;p&gt;Coming from a strong sysadmin and infrastructure background, I spent years managing servers, networks, and keeping systems alive. Over time, I realized a fundamental truth: &lt;strong&gt;the most dangerous system risks are often the ones you don't even have visible inventory for.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That mindset naturally led me into the world of open source. I started building tools to solve real-world problems around API governance, edge safety, data integrity, and automation. &lt;/p&gt;

&lt;p&gt;Here is what I’ve been building in public, what each project taught me, and why these areas matter today:&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Governing LLM &amp;amp; API Traffic: AI-Gateway
&lt;/h2&gt;

&lt;p&gt;As AI applications move to production, controlling model access, enforcing limits, and monitoring traffic becomes critical. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Project:&lt;/strong&gt; &lt;a href="https://github.com/oleg-vdv/AI-Gateway" rel="noopener noreferrer"&gt;AI-Gateway&lt;/a&gt; — A lightweight proxy layer designed to secure, route, and manage API requests and policies for AI services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key Lesson:&lt;/strong&gt; Security in the AI era isn't just about firewall ports; it's about context-aware policy management and dynamic traffic control.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Safety at the Edge: AffectGuard-HRI
&lt;/h2&gt;

&lt;p&gt;Moving machine learning onto edge devices and microcontrollers opens up huge potential for robotics, but it introduces strict real-time safety constraints.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Project:&lt;/strong&gt; &lt;a href="https://github.com/oleg-vdv/affectguard-hri" rel="noopener noreferrer"&gt;AffectGuard-HRI&lt;/a&gt; — An open-source framework tailored for human-robot interaction, focusing on real-time safety, intent tracking, and affective monitoring.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key Lesson:&lt;/strong&gt; Edge AI demands extreme efficiency. You can't rely on cloud latency when dealing with physical robotic hardware—safety loops must run reliably at the hardware level.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Verifiable Data &amp;amp; Audit Trails: ProofByte
&lt;/h2&gt;

&lt;p&gt;In modern SecOps, logging isn't enough—you need verifiable proof of data integrity for compliance and auditing.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Project:&lt;/strong&gt; &lt;a href="https://github.com/oleg-vdv/proofbyte" rel="noopener noreferrer"&gt;ProofByte&lt;/a&gt; — A lightweight tool aimed at data validation, cryptographic verification, and maintaining tamper-evident audit trails.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key Lesson:&lt;/strong&gt; Building trust in distributed workflows requires cryptographic validation at every step of the pipeline.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Modern Workflow Governance: AutoGov
&lt;/h2&gt;

&lt;p&gt;Processes in enterprise environments often break down due to manual bottlenecks and fragmented oversight.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Project:&lt;/strong&gt; &lt;a href="https://github.com/oleg-vdv/AutoGov" rel="noopener noreferrer"&gt;AutoGov&lt;/a&gt; — An automation and workflow governance engine built to streamline standard operating procedures and administrative checks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key Lesson:&lt;/strong&gt; Good automation doesn't replace governance—it bakes governance into the infrastructure so compliance happens by default.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  What’s Next?
&lt;/h3&gt;

&lt;p&gt;Transitioning from maintaining infrastructure to building developer tools in public has been an incredible learning experience. &lt;/p&gt;

&lt;p&gt;I’d love to hear from the community: &lt;strong&gt;What is your biggest pain point right now when securing edge devices or managing AI API endpoints?&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Feel free to check out the repos, leave stars if you find them useful, or open issues/PRs! Let’s connect! 🚀&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>devops</category>
      <category>security</category>
    </item>
    <item>
      <title>The post-quantum deadlines are closer than your roadmap thinks — so I built a CBOM scanner</title>
      <dc:creator>oleg-vdv</dc:creator>
      <pubDate>Fri, 17 Jul 2026 00:55:53 +0000</pubDate>
      <link>https://dev.to/olegvdv/the-post-quantum-deadlines-are-closer-than-your-roadmap-thinks-so-i-built-a-cbom-scanner-55l9</link>
      <guid>https://dev.to/olegvdv/the-post-quantum-deadlines-are-closer-than-your-roadmap-thinks-so-i-built-a-cbom-scanner-55l9</guid>
      <description>&lt;p&gt;Three regulatory clocks are already ticking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;US:&lt;/strong&gt; EO 14412 / CNSA 2.0 requires post-quantum cryptography for new national-security acquisitions &lt;strong&gt;from 2027&lt;/strong&gt; — and explicitly names the "cryptographic bill of materials" (CBOM).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UK:&lt;/strong&gt; NCSC wants full cryptographic discovery and a migration plan &lt;strong&gt;by 2028&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EU:&lt;/strong&gt; member states start transitioning &lt;strong&gt;from the end of 2026&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Yet when an auditor asks the first, most basic question — &lt;em&gt;"where exactly does your codebase use RSA?"&lt;/em&gt; — almost nobody can answer. Not because it's hard conceptually, but because nobody ever had a reason to keep an inventory of their cryptography. Now there's a reason.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "harvest now, decrypt later" actually means
&lt;/h2&gt;

&lt;p&gt;Even if a cryptographically relevant quantum computer is a decade away, traffic recorded &lt;strong&gt;today&lt;/strong&gt; can be decrypted &lt;strong&gt;then&lt;/strong&gt;. If your secrets have a shelf life of more than a few years (medical records, financial data, government contracts), classical key exchange is already a liability. That's the logic behind the deadlines — they don't wait for the quantum computer to exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  One command, three artifacts
&lt;/h2&gt;

&lt;p&gt;I wanted the discovery step to cost one command instead of one consulting engagement:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @proofbyte/pqc-radar scan &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;--cbom&lt;/span&gt; cbom.json &lt;span class="nt"&gt;--report&lt;/span&gt; report.md &lt;span class="nt"&gt;--sarif&lt;/span&gt; findings.sarif
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This walks the repository and flags quantum-vulnerable cryptography — RSA, ECC/ECDH, DH, DSA, Curve25519, legacy hashes, weak TLS configs — across Java, Python, JavaScript/TypeScript, Go, C#, Rust, Ruby, PHP, C/C++ and nginx/Apache configs. Out come three artifacts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;cbom.json&lt;/code&gt;&lt;/strong&gt; — a &lt;a href="https://cyclonedx.org/capabilities/cbom/" rel="noopener noreferrer"&gt;CycloneDX 1.6 CBOM&lt;/a&gt;: the machine-readable inventory the mandates ask for;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;report.md&lt;/code&gt;&lt;/strong&gt; — a human-readable report: every finding with file:line and its ML-KEM (FIPS 203) / ML-DSA (FIPS 204) migration target;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;findings.sarif&lt;/code&gt;&lt;/strong&gt; — SARIF 2.1.0, so findings land straight in GitHub code scanning.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It's fast enough to live in CI: hashicorp/vault (4,827 files) scans in about 9 seconds; a weekly &lt;a href="https://github.com/oleg-vdv/proofbyte/blob/main/docs/CORPUS.md" rel="noopener noreferrer"&gt;corpus workflow&lt;/a&gt; re-scans five well-known OSS projects to catch regressions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Checking live endpoints, not just code
&lt;/h2&gt;

&lt;p&gt;Code is half the story — the other half is what your servers actually negotiate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @proofbyte/pqc-radar scan-tls your-api.example.com github.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One TLS handshake per host (no payload sent) reports the protocol, cipher, key-exchange group and certificate key — and whether the endpoint already speaks &lt;strong&gt;hybrid post-quantum key exchange&lt;/strong&gt; (X25519+ML-KEM-768). One honesty detail I'm proud of: when the local TLS stack can't &lt;em&gt;name&lt;/em&gt; the negotiated group (older OpenSSL builds can't name hybrid groups), the result is reported as &lt;strong&gt;inconclusive&lt;/strong&gt;, not as a finding. Unknown ≠ vulnerable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the v0 honestly can't do
&lt;/h2&gt;

&lt;p&gt;Detection is line-pattern based. That makes it fast, broad and dependency-free, but:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it will miss dynamically constructed crypto calls;&lt;/li&gt;
&lt;li&gt;unusual code can false-positive;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;absence of findings is not proof of absence&lt;/strong&gt; — the report says so explicitly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A deep AST engine (integrating &lt;a href="https://pqca.org/projects/cbomkit/" rel="noopener noreferrer"&gt;PQCA CBOMkit&lt;/a&gt;, which covers Java and Python) is the next milestone. There's also a fun war story: the very first regression test caught the scanner's regexes matching &lt;em&gt;their own source code&lt;/em&gt; — the fix was masking pattern literals with character-class tricks (&lt;code&gt;RSA_generate_ke[y]&lt;/code&gt;), and a permanent guard test asserting the repo only ever flags its own fixtures.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security posture
&lt;/h2&gt;

&lt;p&gt;This is a tool you're supposed to run on code you can't share, so: fully offline (the &lt;code&gt;scan&lt;/code&gt; command makes zero network calls), zero runtime dependencies, read-only, symlinks not followed. &lt;code&gt;scan-tls&lt;/code&gt; is the single network feature and touches only endpoints you name. It's MIT-licensed — &lt;a href="https://github.com/oleg-vdv/proofbyte" rel="noopener noreferrer"&gt;read the source&lt;/a&gt; rather than trusting this paragraph.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @proofbyte/pqc-radar scan &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/oleg-vdv/proofbyte" rel="noopener noreferrer"&gt;https://github.com/oleg-vdv/proofbyte&lt;/a&gt; (issues and PRs welcome — especially new language patterns with fixtures)&lt;/li&gt;
&lt;li&gt;CI one-liner: &lt;code&gt;uses: oleg-vdv/proofbyte@v1&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'd genuinely like to hear from anyone whose org has already been asked for a CBOM — by whom, and what format they accepted.&lt;/p&gt;

</description>
      <category>security</category>
      <category>opensource</category>
      <category>node</category>
      <category>cryptography</category>
    </item>
  </channel>
</rss>
