1import{u as m,b as y,c as g,h as x,j as e,N as v,F as b}from"./index-Bs9qYZhd.js";import{u as j,a as c}from"./vendor-react-BEwYhsj5.js";import{n as w}from"./issuedReport-gUU5Ozlf.js";const k=new Intl.DateTimeFormat("en-US",{month:"long",day:"numeric",year:"numeric",timeZone:"UTC"});function l(t){if(!t)return"Not recorded";const a=Date.parse(t.length===10?`${t}T00:00:00Z`:t);return Number.isNaN(a)?t:k.format(new Date(a))}function T(t){return t==="type2"?"SOC 2 Type 2":"SOC 2 Type 1"}function S(t){switch(t){case"qualified":return"Qualified opinion";case"adverse":return"Adverse opinion";case"disclaimer":return"Disclaimer of opinion";case"unqualified":return"Unqualified opinion";default:return"Not recorded"}}const N=()=>{m({title:"Verify a report | cybersoftware",description:"Confirm that a SOC 2 report issued through cybersoftware is genuine. Paste the report hash to see the report type, issue date, audit period, firm and opinion type.",path:"/verify",robots:"noindex, follow",jsonLd:[y([{name:"Home",path:g.home},{name:"Verify a report",path:"/verify"}])]});const t=j(),[a,s]=c.useState(""),[i,n]=c.useState({kind:"idle"}),p=c.useCallback(async o=>{const d=w(o);if(!d){n({kind:"invalid"});return}n({kind:"loading"});try{const{data:h,status:u}=await x.verify.report(d);if(u===429){n({kind:"error",message:"Too many checks in a short time. Wait a few minutes and try again."});return}if(!h?.success){n({kind:"error",message:h?.error?.message||"Verification is temporarily unavailable. Try again shortly."});return}if(!h.data?.verified){n({kind:"not_found"});return}n({kind:"verified",result:h.data})}catch{n({kind:"error",message:"Verification is temporarily unavailable. Try again shortly."})}},[]);c.useEffect(()=>{const o=new URLSearchParams(t.search),d=o.get("sha")||o.get("ref")||"";d&&(s(d),p(d))},[t.search,p]);const f=o=>{o.preventDefault(),p(a)};return e.jsxs("div",{style:{minHeight:"100vh",display:"flex",flexDirection:"column"},children:[e.jsx(v,{}),e.jsxs("main",{className:"page",style:{flex:1,paddingTop:64,paddingBottom:96,maxWidth:760,margin:"0 auto",width:"100%",boxSizing:"border-box"},children:[e.jsx("h1",{style:{fontSize:32,fontWeight:700,marginBottom:12},children:"Verify a report"}),e.jsx("p",{style:{opacity:.7,lineHeight:1.6,marginBottom:28},children:"Every SOC 2 report issued through cybersoftware is frozen when the auditor approves it and recorded under the SHA-256 (Secure Hash Algorithm 256-bit) hash of the PDF. Paste that hash, the report reference printed on every page of the document, or the verification link the company gave you, to confirm the report is genuine and see what it covers."}),e.jsxs("form",{onSubmit:f,style:{display:"flex",flexDirection:"column",gap:12,marginBottom:32},children:[e.jsx("label",{htmlFor:"verify-sha",style:{fontSize:13,fontWeight:600,opacity:.85},children:"Report hash, report reference, or verification link"}),e.jsx("input",{id:"verify-sha",type:"text",className:"auth-input focus-ring",placeholder:"64 hexadecimal characters, the report reference, or a verification link",value:a,onChange:o=>s(o.target.value),autoComplete:"off",spellCheck:!1,"data-ai-action":"verify-report-hash",style:{fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace",fontSize:13,width:"100%",minWidth:0,boxSizing:"border-box",padding:"12px 14px",borderRadius:10,border:"1px solid var(--rule-strong)",background:"var(--bg)",color:"var(--fg)",textOverflow:"ellipsis"}}),e.jsx("div",{children:e.jsx("button",{type:"submit",className:"btn btn-primary focus-ring",disabled:i.kind==="loading","data-ai-action":"verify-report-submit",children:i.kind==="loading"?"Checking":"Verify report"})})]}),i.kind==="invalid"&&e.jsx("p",{role:"alert",style:{opacity:.8},"data-ai-state":"verify-invalid",children:"That does not look like a report hash or a report reference. A hash is 64 hexadecimal characters (0 to 9 and a to f). A reference is the identifier printed on the report, in the form 3f2b8c14-5d6e-4a7b-8c9d-0e1f2a3b4c5d."}),i.kind==="not_found"&&e.jsxs("div",{role:"status","data-ai-state":"verify-not-found",style:{padding:"18px 20px",borderRadius:12,border:"1px solid var(--rule-strong)"},children:[e.jsx("p",{style:{fontWeight:600,marginBottom:6},children:"No issued report matches that."}),e.jsx("p",{style:{opacity:.7,lineHeight:1.6},children:"Check that the hash or reference was copied in full. If the company sent you the PDF directly, the hash of a file that was altered after issue will not match, and that is exactly what this page is for."})]}),i.kind==="error"&&e.jsx("p",{role:"alert",style:{opacity:.8},"data-ai-state":"verify-error",children:i.message}),i.kind==="verified"&&e.jsx(C,{result:i.result})]}),e.jsx(b,{})]})},r=({label:t,value:a,mono:s})=>e.jsxs("div",{style:{display:"grid",gridTemplateColumns:"180px 1fr",gap:12,padding:"10px 0",borderTop:"1px solid var(--rule)"},children:[e.jsx("span",{style:{opacity:.6,fontSize:13},children:t}),e.jsx("span",{style:{fontSize:14,wordBreak:"break-all",fontFamily:s?"ui-monospace, SFMono-Regular, Menlo, monospace":void 0},children:a})]}),_=({result:t})=>e.jsxs("div",{role:"status","data-ai-state":"verify-isms-package",style:{padding:"20px 22px",borderRadius:12,border:"1px solid var(--rule-strong)"},children:[e.jsx("p",{style:{fontWeight:700,fontSize:18,marginBottom:4},children:"This readiness package is genuine."}),e.jsx("p",{style:{opacity:.7,lineHeight:1.6,marginBottom:14},children:"The hash matches a package frozen when it was issued. The documents in it have not been altered since."}),e.jsx(r,{label:"Company",value:t.company?.legal_name||"Not recorded"}),e.jsx(r,{label:"Package",value:"ISO/IEC 27001 ISMS readiness"}),e.jsx(r,{label:"Documents",value:String(t.document_count??0)}),e.jsx(r,{label:"Issued",value:l(t.issued_at)}),e.jsx(r,{label:"Package hash",value:t.report_sha256,mono:!0}),e.jsx("p",{style:{opacity:.55,fontSize:12,lineHeight:1.6,marginTop:14},children:t.disclosure})]}),C=({result:t})=>{if(t.report_type==="isms_package")return e.jsx(_,{result:t});const a=t.audit?.period_or_as_of||{},s=t.report_type==="type2"?`${l(a.observation_start)} to ${l(a.observation_end)}`:`As of ${l(a.as_of_date)}`;return e.jsxs("div",{role:"status","data-ai-state":"verify-verified",style:{padding:"20px 22px",borderRadius:12,border:"1px solid var(--rule-strong)"},children:[e.jsx("p",{style:{fontWeight:700,fontSize:18,marginBottom:4},children:t.withdrawn?"This report was issued, and has since been withdrawn.":t.superseded?"This report was issued, and has since been superseded.":"This report is genuine."}),e.jsx("p",{style:{opacity:.7,lineHeight:1.6,marginBottom:14},children:t.withdrawn?"The file is genuine and its hash still matches what was issued, but it should no longer be relied on. Ask the company for its current position.":t.superseded?"A later report has been issued for the same audit. Ask the company for the current one.":"The hash matches a report frozen at the moment the auditor approved it. The file itself has not been altered since."}),t.withdrawn&&e.jsx(r,{label:"Withdrawn",value:`${l(t.withdrawn_at)}${t.withdrawn_reason?`. ${t.withdrawn_reason}`:""}`}),e.jsx(r,{label:"Company",value:t.company?.legal_name||"Not recorded"}),e.jsx(r,{label:"Report",value:T(t.report_type)}),e.jsx(r,{label:"Period",value:s}),e.jsx(r,{label:"Issued",value:l(t.issued_at)}),e.jsx(r,{label:"Auditor",value:t.opinion?.firm_name||"Not recorded"}),e.jsx(r,{label:"Opinion",value:S(t.opinion?.opinion_type)}),e.jsx(r,{label:"Auditor conclusions",value:t.conclusions_recorded?"Recorded per control point and frozen with this report":"Not recorded for this report"}),e.jsx(r,{label:"Report hash",value:t.report_sha256,mono:!0}),e.jsx(r,{label:"Renderer version",value:t.renderer_version,mono:!0}),e.jsx("p",{style:{opacity:.55,fontSize:12,lineHeight:1.6,marginTop:14},children:"The report hash, the issue date, the auditor and the opinion were recorded when the report was frozen. The company name and the peri
1od are the current records for that engagement. Read the report itself for what it covers."}),e.jsx("p",{style:{opacity:.55,fontSize:12,lineHeight:1.6,marginTop:8},children:"cybersoftware is not a Certified Public Accountant (CPA) firm. The opinion belongs to the independent firm named above."})]})};export{N as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.