# DLP Detection Test Corpus (Synthetic Data)

30 self-contained HTML pages, each styled as a realistic in-context source (HR system,
hospital EHR, cloud console, CI/CD pipeline, wiki, GenAI chat UI, Indian bank/government
portal, crypto wallet, etc.) rather than a bare div with a label. All names, companies,
addresses, and secrets are fully fictional. No page contains a real, live, or functioning
credential/wallet — but formats/checksums are correct where the underlying format requires
it, so pattern- and validator-based DLP engines can match them.

## Coverage map

| # | File | Category |
|---|------|----------|
| 01 | hr-employee-profile.html | PII (SSN, DOB, address, bank account/routing) |
| 02 | ecommerce-checkout.html | PCI (Luhn-valid Visa PAN, CVV, expiry) + PII |
| 03 | hospital-patient-chart.html | PHI (diagnosis codes, meds, clinical notes, MRN) |
| 04 | lab-results-portal.html | PHI (lab panel, insurance member ID) |
| 05 | aws-devops-config.html | AWS access key + secret key (internal wiki runbook) |
| 06 | gcp-service-account.html | GCP service-account JSON key |
| 07 | azure-connection-strings.html | Azure storage key, SQL connection string, App Insights key |
| 08 | github-source-review.html | GitHub PAT (ghp_...) embedded in source code |
| 09 | gitlab-ci-pipeline.html | GitLab PAT + CI/CD variables (Stripe/Twilio/SendGrid/Mailgun) |
| 10 | stripe-api-keys.html | Stripe live secret/publishable keys, webhook signing secret |
| 11 | twilio-console.html | Twilio Account SID + Auth Token |
| 12 | sendgrid-settings.html | SendGrid API keys |
| 13 | npm-publish-config.html | npm auth token (.npmrc) |
| 14 | mailgun-webhook-config.html | Mailgun private API key + webhook signing key |
| 15 | proprietary-source-code.html | Source code / trade-secret algorithm |
| 16 | internal-project-directory.html | Custom data dictionary: project codenames, customer names, internal URLs |
| 17 | shadow-ai-personal-account.html | Shadow AI: corporate/client data pasted into a free personal GenAI account |
| 18 | bank-wire-transfer.html | PCI-adjacent banking: ABA-checksum-valid routing numbers, account numbers |
| 19 | identity-verification-kyc.html | PII: passport number, driver's license, MRZ-style strip |
| 20 | confidential-incident-memo.html | Mixed: SSN, card, AWS key, internal URL in one narrative doc |
| 21 | crypto-wallet-seed-backup.html | Crypto: BIP-39 12-word mnemonic, BTC (legacy + bech32), ETH addresses |
| 22 | crypto-exchange-support-ticket.html | Crypto: BTC/ETH wallet addresses + Indian PAN in a support thread |
| 23 | indian-aadhaar-ekyc.html | Indian PII: Aadhaar (Verhoeff checksum), PAN, Voter ID, passport, DL |
| 24 | indian-bank-account-kyc.html | Indian PII: Aadhaar, PAN, Voter ID, passport, DL, GSTIN, UAN, UPI ID |
| 25 | indian-income-tax-portal.html | Indian PII: PAN, Aadhaar-linked profile, IFSC + bank account |
| 26 | telehealth-visit-summary.html | PII + PHI: telehealth visit, diagnosis, prescription, insurance ID |
| 27 | pharmacy-prescription-receipt.html | PII + PHI: pharmacy receipt, prescriber DEA#, insurance copay |
| 28 | health-insurance-claim.html | PII + PHI: insurer claim detail, SSN, diagnosis codes, billing |
| 29 | patient-portal-profile.html | PII + PHI: patient portal profile, SSN, conditions, medications |
| 30 | hospital-discharge-summary.html | PII + PHI: full discharge summary, SSN, diagnoses, medications |

## Data validity notes
- Credit card numbers pass the Luhn checksum (generated programmatically) but use non-issued
  test-range prefixes (4539/5412/3714/6011 style).
- Bank routing numbers pass the standard ABA checksum algorithm.
- SSNs follow valid formatting rules (no 000/666/900+ area numbers) but are not real issued numbers.
- Cloud/SaaS keys match each provider's real prefix/length convention (AKIA…, ghp_…, glpat-…,
  sk_live_…, SG…, npm_…, key-…) but are randomly generated and non-functional.
- All company names, people, emails, and internal hostnames are fictional.
- BTC addresses (legacy P2PKH, P2SH, bech32) are generated with correct base58check /
  bech32 checksums against random hashes — valid format, not linked to any real funded wallet.
  ETH addresses are valid-format 40-hex-char strings (not EIP-55 checksum-cased).
- The BIP-39 mnemonic uses words drawn only from the real English wordlist, correct length
  (12/24), but is not guaranteed checksum-valid (last word encodes a checksum in real wallets) —
  sufficient for wordlist/format-based detectors, not for deriving an actual wallet.
- Aadhaar numbers are generated with a correct Verhoeff checksum digit (UIDAI's real algorithm)
  and valid first-digit range (2-9), but are not real issued numbers.
- PAN, Voter ID (EPIC), Indian passport, driving license, GSTIN, UAN, and UPI ID follow their
  standard structural formats but are randomly generated.

Regenerate the checksum-valid financial/crypto/Indian-ID data with `gen_data.py` and
`gen_data2.py` if you need a fresh batch.
