+
    kHàj„  ã                  ó
  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	H
t
 ^ RIHt ^ RIHt ^ RIHtHtHt  ! R R]4      t ! R	 R
]4      t ! R R]4      t ! R R]4      t ! R R4      tR R lt ! R R4      tR# )zbWeCom callback-mode AES-CBC crypto, wire-compatible with Tencent's official ``WXBizMsgCrypt`` SDK.)ÚannotationsN)ÚOptional)ÚElementTree)Údefault_backend)ÚCipherÚ
algorithmsÚmodesc                  ó   € ] tR t^tRtR# )ÚWeComCryptoError© N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r   ó    ÚI/home/ubuntu/.hermes/hermes-agent/plugins/platforms/wecom/wecom_crypto.pyr
   r
      s   † Ûr   r
   c                  ó   € ] tR t^tRtR# )ÚSignatureErrorr   Nr   r   r   r   r   r      s   † «r   r   c                  ó   € ] tR t^tRtR# )ÚDecryptErrorr   Nr   r   r   r   r   r      ó   † £dr   r   c                  ó   € ] tR t^tRtR# )ÚEncryptErrorr   Nr   r   r   r   r   r      r   r   r   c                  óF   € ] tR t^t^ t]R R l4       t]R R l4       tRtR# )ÚPKCS7Encoderc               ó    € V ^8„  d   QhRRRR/# )é   ÚtextÚbytesÚreturnr   )Úformats   "r   Ú__annotate__ÚPKCS7Encoder.__annotate__#   s   € ÷ =ñ =˜%ð = Eñ =r   c                	ó¸   € V P                   \        V4      V P                   ,          ,
          ;'       g    V P                   pV\        V.4      V,          ,           # )N)Ú
block_sizeÚlenr    )Úclsr   Úamount_to_pads   && r   ÚencodeÚPKCS7Encoder.encode"   s@   € àŸ™¬#¨d«)°c·n±nÕ*DÕE×WÐWÈÏÉˆØ”e˜]˜OÓ,¨}Õ<Õ<Ð<r   c               ó    € V ^8„  d   QhRRRR/# )r   Ú	decryptedr    r!   r   )r"   s   "r   r#   r$   (   s   € ÷  ñ  ˜uð  ¨ñ  r   c                	óÖ   € V'       g   \        R 4      hVR,          pV^8  g   W P                  8”  d   \        R4      hW) R \        V.4      V,          8w  d   \        R4      hVRV)  # )zempty decrypted payloadzinvalid PKCS7 paddingNzmalformed PKCS7 paddingéÿÿÿÿ)r   r&   r    )r(   r-   Úpads   && r   ÚdecodeÚPKCS7Encoder.decode'   sk   € çÜÐ8Ó9Ð9Ø˜�mˆØ�Œ7�cŸN™NÔ*ÜÐ6Ó7Ð7Ø�T�UÐœu c U›|¨cÕ1Ô1ÜÐ8Ó9Ð9Ø˜˜3˜$ÐÐr   r   N)	r   r   r   r   r&   Úclassmethodr*   r1   r   r   r   r   r   r      s-   † Ø€Jàô=ó ð=ð ô ó ô r   r   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )r   ÚtokenÚstrÚ	timestampÚnonceÚencryptr!   r   )r"   s   "r   r#   r#   3   s6   € ÷ iñ i˜3ð i¨3ð i°sð iÀSð iÈSñ ir   c           
     óœ   € \         P                  ! R P                  \        WW#.4      4      P	                  R4      4      P                  4       # )Ú úutf-8)ÚhashlibÚsha1ÚjoinÚsortedr*   Ú	hexdigest)r5   r7   r8   r9   s   &&&&r   Ú_sha1_signaturerB   3   s9   € Ü�<Š<˜Ÿ™¤¨¸%Ð'IÓ JÓK×RÑRÐSZÓ[Ó\×fÑfÓhÐhr   c                  ó€   € ] tR t^7tRtR R ltR R ltR R ltR R	 ltRR R llt	R R lt
]RR R ll4       tRtR
# )ÚWXBizMsgCryptzKMinimal WeCom callback crypto helper compatible with BizMsgCrypt semantics.c               ó$   € V ^8„  d   QhRRRRRR/# )r   r5   r6   Úencoding_aes_keyÚ
receive_idr   )r"   s   "r   r#   ÚWXBizMsgCrypt.__annotate__:   s!   € ÷ 	 ñ 	 ˜cð 	 °Sð 	 Àcñ 	 r   c                	ó   € V'       * R 3V'       * R3\        V4      ^+8g  R3V'       * R33 F  w  rEV'       g   K  \        V4      h	  WuV n        V n        \        P
                  ! VR,           4      V n        V P                  R,          V n        R# )ztoken is requiredzencoding_aes_key is requiredz!encoding_aes_key must be 43 charszreceive_id is requiredÚ=:Né   NN)r'   Ú
ValueErrorr5   rG   Úbase64Ú	b64decodeÚkeyÚiv)Úselfr5   rF   rG   ÚbadÚmessages   &&&&  r   Ú__init__ÚWXBizMsgCrypt.__init__:   s�   € àŒYÐ+Ð,Ð3CÔ/CÐEcÐ.dÜÐ!Ó" bÑ(Ð*MÐNÐU_ÔQ_ÐayÐPzó
‰LˆC÷ ‰sÜ  Ó)Ð)ñ
ð ',Ð#ˆŒ
�D”OÜ×#Ò#Ð$4°sÕ$:Ó;ˆŒØ—(‘(˜3•-ˆŽr   c               ó   € V ^8„  d   QhRR/# )r   r!   r   r   )r"   s   "r   r#   rH   E   s   € ÷ _ñ _˜ñ _r   c                	ó¦   € \        \        P                  ! V P                  4      \        P
                  ! V P                  4      \        4       R 7      # ))Úbackend)r   r   ÚAESrO   r   ÚCBCrP   r   )rQ   s   &r   Ú_cipherÚWXBizMsgCrypt._cipherE   s.   € Ü”j—n’n T§X¡XÓ.´·	²	¸$¿'¹'Ó0BÌOÓL]Ô^Ð^r   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )r   Úmsg_signaturer6   r7   r8   Úechostrr!   r   )r"   s   "r   r#   rH   H   s8   € ÷ Vñ V¨ð V¸ð VÀCð VÐRUð VÐZ]ñ Vr   c                	óD   € V P                  WW44      P                  R 4      # )r<   )Údecryptr1   )rQ   r^   r7   r8   r_   s   &&&&&r   Ú
verify_urlÚWXBizMsgCrypt.verify_urlH   s   € Ø�|‰|˜M°eÓE×LÑLÈWÓUÐUr   c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )r   r^   r6   r7   r8   r9   r!   r    r   )r"   s   "r   r#   rH   K   s0   € ÷ ñ  Sð °Sð Àð Èsð ÐW\ñ r   c                	óÒ  € \        V P                  W#V4      V8w  d   \        R 4      h \        P                  ! V4      p T P                  4       P                  4       p\        P                  TP                  T4      TP                  4       ,           4      R,          p\        P                  ! \        P                   ! RTR,          4      ^ ,          4      p	T^^T	,            T^T	,           R P                  R4      rºY°P$                  8w  d   \        R4      hT
#   \
         d   p\        RT 24      ThRp?ii ; i  \"         d    h \
         d   p\        RT 24      ThRp?ii ; i)	zsignature mismatchzinvalid base64 payload: N:rK   NNÚI:Né   Nr<   zdecrypt failed: zreceive_id mismatch)rB   r5   r   rM   rN   Ú	Exceptionr   r[   Ú	decryptorr   r1   ÚupdateÚfinalizeÚsocketÚntohlÚstructÚunpackr
   rG   )rQ   r^   r7   r8   r9   Úcipher_textÚexcri   ÚcontentÚ
xml_lengthÚxml_contentrG   s   &&&&&       r   ra   ÚWXBizMsgCrypt.decryptK   sG  € Ü˜4Ÿ:™: y¸ÓAÀ]ÔRÜ Ð!5Ó6Ð6ð	JÜ ×*Ò*¨7Ó3ˆKð	BØŸ™›×0Ñ0Ó2ˆIÜ"×)Ñ)¨)×*:Ñ*:¸;Ó*GÈ)×J\ÑJ\ÓJ^Õ*^Ó_Ð`cÕdˆGÜŸš¤f§m¢m°C¸À½Ó&EÀaÕ&HÓIˆJØ&-¨a°°JµÐ&?ÀÈÈZÍÈÐAY×A`ÑA`ÐahÓAi˜ð
 Ÿ™Ô(ÜÐ4Ó5Ð5ØÐøô ô 	JÜÐ!9¸#¸Ð?Ó@ÀcÐIûð	Jûô  ô 	ØÜô 	BÜÐ!1°#°Ð7Ó8¸cÐAûð	Bús6   ©D Á B=D< ÄD9Ä%D4Ä4D9Ä<E&ÅE&ÅE!Å!E&Nc               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Ú	plaintextr6   r8   zOptional[str]r7   r!   r   )r"   s   "r   r#   rH   _   s)   € ÷ 5ñ 5 ð 5¨]ð 5Èmð 5Ðgjñ 5r   c                	óÊ  € T;'       g    V P                  4       pT;'       g,    \        \        \        R 4      P	                  4       4      4      pV P                  VP                  R4      4      p\        P                  ! R4      pRV3R\        V P                  W2V4      3RV3RV33 F   w  rgV\        P                  ! WV4      n        K"  	  \        P                  ! VRR7      # )	Útimer<   ÚxmlÚEncryptÚMsgSignatureÚ	TimeStampÚNonceÚunicode)Úencoding)Ú_random_noncer6   ÚintÚ
__import__ry   Ú_encrypt_bytesr*   ÚETÚElementrB   r5   Ú
SubElementr   Útostring)rQ   rw   r8   r7   r9   ÚrootÚtagr   s   &&&&    r   r9   ÚWXBizMsgCrypt.encrypt_   sã   € Ø×-Ð-˜×+Ñ+Ó-ˆØ×DÐD¤¤S¬°FÓ);×)@Ñ)@Ó)BÓ%CÓ!Dˆ	Ø×%Ñ% i×&6Ñ&6°wÓ&?Ó@ˆÜ�zŠz˜%Ó ˆØ$ gÐ.°ÄÐQU×Q[ÑQ[Ð]fÐovÓAwÐ0xð  |Gð  IRð  {Sð  V]ð  _dð  Ueó  f‰IˆCØ,0ŒB�MŠM˜$Ó$Ö)ñ fä�{Š{˜4¨)Ô4Ð4r   c               ó    € V ^8„  d   QhRRRR/# )r   Úrawr    r!   r6   r   )r"   s   "r   r#   rH   h   s   € ÷ Bñ B %ð B¨Cñ Br   c           	     	ó(  €  \         P                  ! ^4      \        P                  ! R\        P
                  ! \        V4      4      4      ,           V,           V P                  P                  R4      ,           pV P                  4       P                  4       p\        P                  ! VP                  \        P                  V4      4      VP                  4       ,           4      P!                  R4      #   \"         d   p\%        RT 24      ThRp?ii ; i)rK   rf   r<   zencrypt failed: N)ÚosÚurandomrn   Úpackrl   Úhtonlr'   rG   r*   r[   Ú	encryptorrM   Ú	b64encoderj   r   rk   r1   rh   r   )rQ   r�   Úpayloadr“   rq   s   &&   r   r„   ÚWXBizMsgCrypt._encrypt_bytesh   sÍ   € ð	BÜ—j’j “n¤v§{¢{°3¼¿ºÄSÈÃXÓ8NÓ'OÕOÐRUÕUÐX\×XgÑXg×XnÑXnÐovÓXwÕwˆGØŸ™›×0Ñ0Ó2ˆIÜ×#Ò# I×$4Ñ$4´\×5HÑ5HÈÓ5QÓ$RÐU^×UgÑUgÓUiÕ$iÓj×qÑqÐryÓzÐzøÜô 	BÜÐ!1°#°Ð7Ó8¸cÐAûð	Bús   ‚C/C2 Ã2DÃ=DÄDc               ó    € V ^8„  d   QhRRRR/# )r   Úlengthr‚   r!   r6   r   )r"   s   "r   r#   rH   q   s   € ÷ @ñ @˜cð @¨3ñ @r   c                	óD   € R P                  R \        V 4       4       4      # )r;   c              3  óN   "  € T F  p\         P                  ! R 4      x € K  	  R# 5i)Ú>0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZN)ÚsecretsÚchoice)Ú.0Ú_s   & r   Ú	<genexpr>Ú.WXBizMsgCrypt._random_nonce.<locals>.<genexpr>r   s    é € ÐÑq~Ðlm”w—~’~Ð&f×gÐgÓq~ùs   ‚#%)r?   Úrange)r˜   s   &r   r�   ÚWXBizMsgCrypt._random_noncep   s   € à�w‰wÑÔqvÐw}Ôq~ÓÓÐr   )rP   rO   rG   r5   )NN)é
   )r   r   r   r   Ú__doc__rT   r[   rb   ra   r9   r„   Ústaticmethodr�   r   r   r   r   rD   rD   7   s<   † ÙUõ	 õ_õVõ÷(5õBð ö@ó ô@r   rD   )r¥   Ú
__future__r   rM   r=   r�   rœ   rl   rn   Útypingr   Ú	xml.etreer   r…   Úcryptography.hazmat.backendsr   Ú&cryptography.hazmat.primitives.ciphersr   r   r   rh   r
   r   r   r   r   rB   rD   r   r   r   Ú<module>r¬      su   ðÙ hå "ã Û Û 	Û Û Û Ý Ý 'å 8ß LÑ Lô	�yô 	ô -Ð%Ô ,ô +Ð#Ô *ô +Ð#Ô *÷ ñ  õ(i÷;@ó ;@r   