Something went wrong. Try again.
Extract an archive's commit object, resolve its public key, and verify its signature.
Something went wrong. Try again.
car-commit-object-debugger index.html
5.1 kB · 242 lines
HTML
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243<!doctype html><html lang="en"> <head> <meta charset="utf-8" /> <title>atproto CAR signature verifier</title> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="description" content="drop a CAR file, see if its signature can be verified" /> <style> :root { color-scheme: light dark; font-family: ui-monospace, monospace; } body { margin: 0; padding: 2rem 2rem 0.5rem; line-height: 1.5; min-height: 100vh; box-sizing: border-box; display: flex; flex-direction: column; } .container { max-width: 48em; margin: 0 auto; width: 100%; flex: 1; display: flex; flex-direction: column; } h1 { font-size: 1rem; font-weight: 600; } p { color: #444; margin: 0; } #dropzone { border: 3px dashed #888; border-radius: 0.5em; padding: 3rem; text-align: center; cursor: pointer; margin: 3rem 0; } #dropzone.dragover { border-style: dotted; font-style: italic; } /* top-level result blocks get spacing; per-element rules can override */ #results .head, #results .keyline, #results .err, #results details { margin-top: 1.25rem; } #results .head:first-child, #results .err:first-child { margin-top: 0; } .head { display: flex; gap: 0.5em; align-items: baseline; } .filename { font-size: 0.9em; word-break: break-all; } .badge { display: inline-block; padding: 0.1em 0.6em; border-radius: 1em; font-weight: 700; font-size: 0.9em; } .badge.ok { background: green; color: #fff; } .badge.bad { background: red; color: #fff; } .err { color: red; word-break: break-all; } .keyline { word-break: break-all; } .commit-wrap { margin: 3rem 0 2rem; } .commit-title { font-weight: 600; margin: 0.5rem 0; } .commit-wrap > table { border-collapse: collapse; width: 100%; } .commit th, .commit td { text-align: left; padding: 0.4em 0.6em; border-bottom: 1px solid #8888; vertical-align: top; word-break: break-all; } .commit td { font-size: 0.9em; } .commit th { font-weight: 600; font-size: 0.85em; opacity: 0.7; } .commit td:first-child { white-space: nowrap; } .commit tr.warn td { color: darkorange; } .commit tr.unexpected td { opacity: 0.6; font-style: italic; } .commit .note { font-size: 0.8em; font-style: italic; opacity: 0.8; } .copyrow { word-break: break-all; } .copyrow code { display: block; font-size: 0.85em; max-height: 8em; overflow: auto; margin: 0.5em 0; } .copyrow button { font-family: inherit; font-size: 0.85em; margin-right: 0.5em; cursor: pointer; } details { margin-bottom: 3rem; } details > summary { opacity: 0.6; font-size: 0.85em; cursor: pointer; } .copyrow .copybtn { margin-right: 0.75em; } /* segmented hex/base64 toggle */ .fmt-toggle { display: inline-flex; border: 1px solid #8888; border-radius: 0.3em; overflow: hidden; font-size: 0.85em; vertical-align: middle; } .fmt-toggle button { font-family: inherit; margin: 0; padding: 0.15em 0.6em; cursor: pointer; background: none; border: none; color: inherit; opacity: 0.5; } .fmt-toggle button[aria-pressed='true'] { opacity: 1; background: #8883; } footer { margin-top: auto; padding-top: 0.5rem; border-top: 1px solid #8888; font-size: 0.85em; color: #888; } footer a { color: inherit; } .muted { opacity: 0.6; } @media (prefers-color-scheme: dark) { p { color: #ccc; } .badge.ok { background: #2ea043; } .badge.bad { background: #da3633; } .err { color: #ff7b72; } .commit tr.warn td { color: #ffa657; } .commit th, .commit td { border-bottom-color: #fff2; } } </style> </head> <body> <div class="container"> <h1>CAR commit object signature verifier</h1> <p> Extracts the commit object, resolves the identity's public key, and checks the archive's signature. Does not verify other archive contents. </p>
<div id="dropzone" tabindex="0" role="button" aria-label="drop a CAR file here"> drop a .car here (or click) </div> <input type="file" id="fileinput" accept=".car,application/vnd.ipfs.car" hidden />
<div id="results"></div>
<footer> by <a href="https://bsky.app/profile/bad-example.com" target="_blank" rel="noopener noreferrer">@bad-example.com</a> <a href="https://github.com/sponsors/uniphil/" target="_blank" rel="noopener noreferrer">sponsor</a> <a href="https://tangled.org/microcosm.blue/car-commit-object-debugger/" id="srclink">tangled</a> </footer> </div> <script type="module" src="/src/main.ts"></script> </body></html>