{
  "lab": "qr-check",
  "network": "same-origin-files",
  "storage": "none",
  "input": "A photo or screenshot you choose; it is decoded in the browser tab and never uploaded. The example codes are loaded from this site.",
  "statement": "This page sends nothing anywhere. If an AI agent or browser extension is reading your screen, it can see what's shown here.",
  "enforcedBy": "content-security-policy: connect-src 'self' (the browser blocks any request to another site)",
  "check": [
    "curl -sI https://lab.hopperlabs.ai/labs/qr-check/run | grep -i content-security-policy",
    "Compare each file below with its sha256, and read the source at the commit given.",
    "Once the page has loaded, turn off Wi-Fi: the lab keeps working."
  ],
  "source": {
    "repository": "hopperlabs-ai-dev/hopper-lab",
    "commit": "fcb56962e61de9ef456ebdea32d13ab1fc56e882",
    "files": [
      {
        "path": "/qr-check/app.js",
        "sha256": "6b3acf387acd4d666cf1e5ccbef2ecca1fe13173e26a9102f7c2af19a67f0a9c"
      },
      {
        "path": "/qr-check/chrome.css",
        "sha256": "abeaecb0b75fd9f80d6380f840ddadf1a76a1eaf9cd5bde90c9e69d785a73bb3"
      },
      {
        "path": "/qr-check/examples/crypto.png",
        "sha256": "f7e6523ae98703b945b70b0ee84960d176e9b2e88d2726b44d94aa68752c71f0"
      },
      {
        "path": "/qr-check/examples/parking.png",
        "sha256": "ccbfa42999a1b4311e3985ec35e620c6a1e47d3af8662b414746153a27fdd639"
      },
      {
        "path": "/qr-check/examples/wifi.png",
        "sha256": "bb70334143d6e5da1ae73d27e1720b2f7b987c47489288caa5adfa5b025272be"
      },
      {
        "path": "/qr-check/index.html",
        "sha256": "8faf844aa47dea4108a63206e8e6f23bcea8206ec49ffb7c3c196f2715ab91ed"
      },
      {
        "path": "/qr-check/lab-kit.js",
        "sha256": "d6dd870a1b38a807637070750eb57d7d31c57b25541bd2a7f8dbab093e261407"
      },
      {
        "path": "/qr-check/lab.css",
        "sha256": "5d42062c3a8db4391acc419f1257cb0666102b3bb97a40d6689350f1bad48072"
      },
      {
        "path": "/qr-check/link-analysis.js",
        "sha256": "a44df07bce15492f862bb7a3fec6082bd55b53a5eb71f6473257b29745762db6"
      },
      {
        "path": "/qr-check/qr-analysis.js",
        "sha256": "1feadda8c57b8c908645c9b2be94692b214c160acef7868af331b52aff41fb2b"
      },
      {
        "path": "/qr-check/vendor/jsqr/LICENSE",
        "sha256": "c6596eb7be8581c18be736c846fb9173b69eccf6ef94c5135893ec56bd92ba08"
      },
      {
        "path": "/qr-check/vendor/jsqr/SOURCE.txt",
        "sha256": "727b825e004b33e00c870103055334b4518f10cf0cbc382aa16c7f79737a117d"
      },
      {
        "path": "/qr-check/vendor/jsqr/jsQR.js",
        "sha256": "bc40c8a15196236b2314db0856f72ca0b49980cd5413b8c852a7349f5fee0859"
      },
      {
        "path": "/qr-check/vendor/tldts/LICENSE",
        "sha256": "c64182d48160db948b6aa97a984f1a32974ce4d2053900361264cd33853796cb"
      },
      {
        "path": "/qr-check/vendor/tldts/SOURCE.txt",
        "sha256": "9ed483eabbcc7db1a7cb13bf3d03c7f59d63ea61b427429c2b12783f1164d347"
      },
      {
        "path": "/qr-check/vendor/tldts/index.esm.min.js",
        "sha256": "60cec86c8311957068cf056226740108547f57abd3489be7e320e13b1341b847"
      }
    ]
  }
}
