
    Ph+                         d dl mZmZmZmZmZ d dlmZ ddlm	Z	 d dl
Z
dZdZdZ G d	 d
e	j                        ZddddfdZd Z G d de      Zy)    )	bytesjoinstrjointobytestostrsafeEval)sstruct   )DefaultTableNzJ
	> # big endian
	ulVersion:      L
	usNumSigs:      H
	usFlag:         H
zw
	> # big endian
	ulFormat:       L
	ulLength:       L # length includes DSIG_SignatureBlock header
	ulOffset:       L
zo
	> # big endian
	usReserved1:    H
	usReserved2:    H
	cbSignature:    l # length of following raw pkcs7 data
c                   (    e Zd ZdZd Zd Zd Zd Zy)table_D_S_I_G_zDigital Signature table

    The ``DSIG`` table contains cryptographic signatures for the font.

    See also https://learn.microsoft.com/en-us/typography/opentype/spec/dsig
    c                 t   t        j                  t        ||       \  }}| j                  dk(  sJ d       | j                  dz  dk(  sJ d       g x| _        }t        | j                        D ]R  }t        j                  t        |t                     \  }}|j                  dk(  s
J d|z         |j                  |       T |D ]s  }t        j                  t        ||j                  d  |      \  }}|j                  dk(  s
J dz         |j                  dk(  s
J dz         |d |j                    |_        u y )	Nr	   zDSIG ulVersion must be 1r   zDSIG usFlag must be 0x1 or 0x0z,DSIG signature record #%d ulFormat must be 1z0DSIG signature record #%d usReserverd1 must be 0z0DSIG signature record #%d usReserverd2 must be 0)r   unpack2DSIG_HeaderFormat	ulVersionusFlagsignatureRecordsrange	usNumSigsDSIG_SignatureFormatSignatureRecordulFormatappendDSIG_SignatureBlockFormatulOffsetusReserved1usReserved2cbSignaturepkcs7)selfdatattFontdummynewDatasigrecsnsigrecs           jC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\fontTools/ttLib/tables/D_S_I_G_.py	decompileztable_D_S_I_G_.decompile1   sM    ):D$Gw~~">$>>"{{R1$F&FF$*,,t~~&A%oo$g/@OFG ??a' >B' NN6" ' F$__)40A+BFNE7 %%* BQF* %%* BQF* ##7V%7%78FL     c                 P   t        j                  t        |       }|g}t        |      | j                  t        j
                  t              z  z   }g }| j                  D ]  }t        |j                        |_	        t        j                  t        |      |j                  z   }|j                  |       t        |      |_        ||_        |j                  t        j                  t        |             ||j                  z  } |dz  r|j                  d       t        ||z         S )N       )r   packr   lenr   calcsizer   r   r   r   r   r   ulLengthr   r   )r    r"   packedheadersoffsetr!   r'   s          r(   compileztable_D_S_I_G_.compileJ   s    /6(Vt~~0@0@AU0VVV++F!$V\\!2F\\";VDv||SFKK!&kFO$FONN7<<(<fEFfoo%F , A:KK4((r*   c                 8   |j                  d       |j                          |j                  d| j                  | j                  d| j
                  z         | j                  D ]$  }|j                          |j                  ||       & |j                          y )NzDnote that the Digital Signature will be invalid after recompilation!tableHeaderz0x%X)versionnumSigsflag)commentnewline	simpletagr   r   r   r   toXML)r    	xmlWriterr"   r'   s       r(   r>   ztable_D_S_I_G_.toXML_   s    R	
 	NNNN$++%	 	 	
 ++FLLF+ , 	r*   c                    |dk(  rAg | _         t        |d         | _        t        |d         | _        t        |d         | _        y |dk(  r:t               }|j                  ||||       | j                   j                  |       y y )Nr7   r8   r9   r:   r   )r   r   r   r   r   r   fromXMLr   )r    nameattrscontentr"   r'   s         r(   rA   ztable_D_S_I_G_.fromXMLo   s    = $&D!%eI&67DN%eI&67DN"5=1DK$$$&FNN48!!((0 %r*   N)__name__
__module____qualname____doc__r)   r5   r>   rA    r*   r(   r   r   )   s    92)* 
1r*   r   T)z-----BEGIN PKCS7-----z-----END PKCS7----- c                 B    |j                  | j                                S )N)getstrip)lspams     r(   <lambda>rP   |   s     xx	r*   c                     t        j                  |       }g }|r6|j                  t        |d d              |j                  d       |dd  }|r6t	        |      S )NL   
)base64	b64encoder   r   r   )bsitemss      r(   rU   rU      sX    AE
U1Sb6]#TbcF  5>r*   c                       e Zd Zd Zd Zd Zy)r   c                 P    d| j                   j                  d| j                  dS )N<z: >)	__class__rE   __dict__)r    s    r(   __repr__zSignatureRecord.__repr__   s    !^^44dmmDDr*   c                 \   |j                  | j                  j                  | j                         |j	                          |j                  d       |j                  t        | j                               |j                  d       |j                  | j                  j                         y )N)formatz-----BEGIN PKCS7-----
z-----END PKCS7-----
)	begintagr]   rE   r   r<   write_noindentrU   r   endtag)r    writerr"   s      r(   r>   zSignatureRecord.toXML   su    //F78i

3456dnn--.r*   c           
         t        |d         | _        t        |j                  dd            | _        t        |j                  dd            | _        t        j                  t        t        t        t        |                        | _        y )Nra   	reserved10	reserved2)r   r   rL   r   r   rT   	b64decoder   r   filterpem_spamr   )r    rB   rC   rD   r"   s        r(   rA   zSignatureRecord.fromXML   se     x1#EIIk3$?@#EIIk3$?@%%ggfXw6O.P&QR
r*   N)rE   rF   rG   r_   r>   rA   rI   r*   r(   r   r      s    E/Sr*   r   )fontTools.misc.textToolsr   r   r   r   r   fontTools.miscr   rJ   r
   rT   r   r   r   r   rl   rU   objectr   rI   r*   r(   <module>rp      sk    Q Q "     (P1\.. P1h " Sf Sr*   