
    ǂj*                       d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZ ddlmZ ddlmZ  ee      j#                         j$                  Zh dZddZdd	Zddd
ZddZddZddZedk(  r$	  e       Z e ej<                  edd             yy# e$ r$Z  ede  ejB                          e"d      dZ [ ww xY w)z<Independent static-seal and optional final-capture verifier.    )annotationsN)Path)NoReturn)Image>   independent-verification.json	SEAL.jsoninventory.jsoncapture-receipt.redacted.jsonc                H    t        j                  |       j                         S N)hashlibsha256	hexdigest)datas    /home/cube/projects/richard/traning coach/.omo/evidence/task26/task26-strict-rerun-customer-surface-capture-st_01a00ed6/independent_verify.pyshar      s    GNN4$8$B$B$DD    c                    t        |       r   )RuntimeError)messages    r   failr      s    ,w*?$?r   c                L   t        j                  | t         j                  t         j                  z  t         j                  z        }	 t        j
                  |      }t        j                  |j                        r$|:t        j                  |j                        |k7  rt        d| j                          g }	 t        j                  |d      }|sn|j                  |       +dj                  |      t        j                  |       S # t        j                  |       w xY w)Nzunsafe mode/type: i   r   )osopenO_RDONLY	O_CLOEXEC
O_NOFOLLOWfstatstatS_ISREGst_modeS_IMODEr   namereadappendjoinclose)pathmodefdstchunksparts         r   read_regularr.      s    	r{{R\\1BMMA	BB	XXb\||BJJ'D,<bjjAY]aAadhk}  C  H  H  ~I  jJ  eKU#DMM$  xxXXb\RXXb\s   B.D D#c                V    t        j                  | ddd      dz   j                         S )NT,:)ensure_ascii	sort_keys
separators
)jsondumpsencode)vs    r   	canonicalr;      s-    4::adVZgq+rsw+w**  +B  $Br   c                   | j                  d      r/t        |       dk\  r!t        j                  d| dd       \  }}d||fS | j                  d      rd}|dz   t        |       k  r| |   d	k7  r|d
z  }|t        |       k  r$| |   d	k(  r|d
z  }|t        |       k  r	| |   d	k(  r|t        |       k\  rn| |   }|d
z  }|dv sd|cxk  rdk  rn n}|dz   t        |       kD  rnrt        j                  d| ||dz          d   }|dv r8|dz   t        |       k  r't        j                  d| |dz   |dz          \  }}d||fS ||z  }|dz   t        |       k  rt	        d       y )Ns   PNG

   z>II   PNGs               >               z>Hr   >                                             z>HH   JPEGzunrecognized image)
startswithlenstructunpackr   )r   widthheightposmarkerlengths         r   image_headerra      s   +,TB]]5b5feE&>P7P{#!eSYCy#~sAvsxc$i-DIsNCFC#c$i-DIsNCI~u9Fc1fc$f(:d(:H1uSY==d3s1uo6q9F[[`cde`egjkogp`p#]]5c!eCE1BCuFSXY_L_E_KC !eSY 		r   c                    t        j                  t        t        dz  d            } t        j                  t        t        dz  d            }| j	                  d      dk7  s|j	                  d      dk7  rt        d       t        t        |             |j	                  d      k7  rt        d	       | d
   D ][  }t        |d   z  }t        |t        |d   d            }t        |      |d   k7  st        |      |d   k7  sKt        d|d           ] t        j                  t        t        dz  d            }t        t        t        dz  d            |d   k7  rt        d       t        dz  }ddddd}|j                         s|j                         rBt        j                  t        |d            }|j	                  di       }	|j	                  d      |j	                  d      k7  s|j	                  d      |d   k7  rt        d       |j	                  d      dddddd k7  rt        d!       t        |	j	                  d"d#      z  }
|
j                  t        d$z  k7  rt        d%       t        |
d      }t        |      \  }}}t        j                  |
      5 }|j!                          |j"                  |j$                  |j&                  |j(                  f}d d d        t        |      |	j	                  d&      k7  smt        |      |	j	                  d'      k7  sP|||f|	j	                  d(      |	j	                  d)      |	j	                  d*      fk7  s||||	j	                  d+      fk7  rt        d,       |j	                  d-i       j	                  d.      dus|d-   j	                  d/      durt        d0       |j+                  dd1t        |      2       |S # 1 sw Y   xY w)3Nr	   i  r   schemaz,task26-customer-surface-capture-inventory-v1z'task26-customer-surface-capture-seal-v1zseal schema mismatchinventory_sha256zinventory digest mismatchentriesr(   r)      bytesr   zsealed artifact mismatch: zcapture-contract.jsoncontract_sha256zcontract digest mismatchr
   z3task26-customer-surface-independent-verification-v1PASSAWAITING_IMAGEPASS_AWAITING_FINAL_RUN_IMAGE)rc   sealed_harnessfinal_capturestatuscapturebindingzreceipt binding mismatchprivacyFT)&chat_attachment_is_filesystem_evidencecustomer_answers_in_jsonimage_is_protected_evidenceocr_performedraw_delivered_text_in_jsonzprivacy receipt mismatch
vault_path vaultzvault path escapeimage_sha256image_bytesimage_formatimage_widthimage_height
image_modezcaptured image mismatchoperator_attestationexactly_one_visible_messagematches_durable_delivered_textzattestation missingPASS_CAPTURE_VERIFIED)rm   rn   rz   )r7   loadsr.   ROOTgetr   r   r;   intrY   exists
is_symlinkparentra   r   r   loadformatr\   r]   r)   update)	inventorysealentryr(   rawcontractreceipt_pathresultreceiptro   
image_pathr   fmtr\   r]   imagedecodeds                    r   verifyr   ,   s_   jjd+;&;EBCI$**UabfgrbrsxUyJzT}}X NNRVRZRZ[cRd  gP  SP  RV  Wm  Rn
9Y $((+=">>E`@a9%%-\$E&M!8L%Ms8U7^#s3xx'@$IcdijpdqcrGsBt & ZZT*A%A%HIH
<44U;<dCT>UUW[\vWw55L(]ou  GW  a@  AF 7 7 9

<U;<gkkR[\^F_g;;y!8<<	#::gkkJ[>\^bct^u>uw{  }W  xX;;y!Uns  SW  hm  KP  $Q  Q  SW  Xr  SsL44
d7l*D1D,E*U+%d+E&ZZ
#uJJL5<<ELL"T' $t9gkk.11SYM@Z5Z_bchio^pt{tt  AO  uP  QX  Q\  Q\  ]j  Qk  ls  lw  lw  xF  lG  tH  _H  LS  VY  Z_  `f  gn  gr  gr  s  g@  UA  LA  CG  Ha  Cb;;-b1556ST\``dk  mC  eD  eH  eH  Ii  ej  rv  ev  x|  }R  xSF2IWZ[_W`aM $#s   ?OO&__main__Tr0   )r4   r5   zverification failed: )filer@   )r   rg   returnstr)r   r   r   r   r   )r(   r   r)   z
int | Noner   rg   )r:   objectr   rg   )r   rg   r   ztuple[str, int, int])r   zdict[str, object])#__doc__
__future__r   r   r7   r   r   rZ   syszlibpathlibr   typingr   PILr   __file__resolver   r   SELF_EXCLUDEDr   r   r.   r;   ra   r   __name__r   printr8   	Exceptionexcstderr
SystemExit r   r   <module>r      s    B " 1 1 1 1   H~&&q D ? B"2 ZRxztzz&49UV   R%cU+<JqM>QRs   :"B C#CC