
    jke                         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y)table_D_S_I_G_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           A/usr/lib/python3/dist-packages/fontTools/ttLib/tables/D_S_I_G_.py	decompileztable_D_S_I_G_.decompile*   sW    ):D$Gw~~">$>>"{{R1$F&FF$*,,t~~& 	#A%oo$g/@OFG ??a' >B' NN6"	#  
	9F$__)40A+BFNE7 %%* BQF* %%* BQF* ##7V%7%78FL
	9    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_.compileC   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_.toXMLX   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_.fromXMLh   s    = $&D!%eI&67DN%eI&67DN"5=1DK$$$&FNN48!!((0 %r*   N)__name__
__module____qualname__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>rO   u   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(   rT   rT   |   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_noindentrT   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 )Nr`   	reserved10	reserved2)r   r   rK   r   r   rS   	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   rH   r*   r(   r   r      s    E/Sr*   r   )fontTools.misc.textToolsr   r   r   r   r   fontTools.miscr   rI   r
   rS   r   r   r   r   rk   rT   objectr   rH   r*   r(   <module>ro      sk    Q Q "     (I1\.. I1Z " Sf Sr*   